En el post anterior («Búsqueda de archivos con find«), explicamos cómo usar find para encontrar archivos en nuestro sistema a partir de varios criterios de búsqueda (usuario dueño, fecha de modificación, nombre, etc.) usándolos solos o combinados. En esta oportunidad veremos cómo buscar archivos a partir de los permisos o tamaño que posean y cómo realizar una acción determinada sobre los resultados.
Búsqueda de archivos por permisos
En nuestro sistema no deberíamos permitir que existan archivos con permisos 777, o sea, que permitan a todos los usuario leerlos, escribirlos, y ejecutarlos. La razón es que ese tipo de permisos abren la puerta que cualquier usuario o servicio que se esté ejecutando haga -en pocas palabras- lo que desee con dichos archivos.
Veamos cómo podemos especificar un permiso como criterio de búsqueda a través de la opción -perm. Por ejemplo,
[pastacode lang=»bash» manual=»find%20%2F%20-type%20f%20-perm%20777%20%23%20Archivos%20con%20permisos%20777%20a%20partir%20de%20%2F%0Afind%20.%20-type%20f%20-perm%20-o%3Dx%20%23%20Archivos%20ejecutables%20por%20todos%20en%20el%20directorio%20actual» message=»» highlight=»» provider=»manual»/]
Búsqueda de archivos vacíos
En un sistema Linux, tampoco es deseable tener archivos vacíos ya que la acumulación excesiva de los mismos puede ocasionar que a un usuario se le impida crear nuevos archivos válidos en un filesystem con cuotas. Con la versión GNU de find (presente por defecto en cualquier distribución moderna) podemos utiliza la opción -empty junto con -type f para encontrar archivos cuyo tamaño sea de 0 B:
[pastacode lang=»bash» manual=»find%20%2F%20-type%20f%20-empty%20%23%20Archivos%20vac%C3%ADos%20a%20partir%20de%20%2F» message=»» highlight=»» provider=»manual»/]
Ejemplos
Para ilustrar los puntos anteriores, creemos los siguientes archivos y asignemos los permisos indicados:
[pastacode lang=»bash» manual=»echo%20%22Este%20es%20un%20archivo%20con%20permisos%20777%22%20%3E%20archivo1%0Achmod%20777%20archivo1%0Atouch%20archivo2″ message=»» highlight=»» provider=»manual»/]
De esta manera:
- archivo1 tiene permisos 777
- archivo2 está vacío
Queremos:
- Para cambiar los permisos de 777 a 644, utilizaremos la opción -exec seguida de la acción que deseamos realizar (en este caso chmod 644 a todos los archivos resultantes, simbolizados por {}+):
[pastacode lang=»bash» manual=»find%20.%20-type%20f%20-perm%20777%20-exec%20chmod%20644%20%7B%7D%20%2B» message=»» highlight=»» provider=»manual»/]
- Para borrar orrar el archivo vacío usaremos la opción -delete de GNU find (en este caso no es necesario recurrir a -exec para especificar la acción deseada ya que la misma es provista por una opción en particular):
[pastacode lang=»bash» manual=»find%20.%20-type%20f%20-empty%20-delete» message=»» highlight=»» provider=»manual»/]
Veamos paso a paso la ejecución es estos comandos en la Fig. 1:
En la imagen de arriba podemos ver cómo los permisos de archivo1 cambiaron de 777 a 644 y que archivo2 fue borrado por cumplir con la condición especificada.
Espero que les sirva. ¡Hasta el próximo post!