Ejecutar acciones sobre los resultados de búsquedas con find

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:

Ver resultados de acciones realizadas sobre los resultados de la búsqueda
Figura 1: Ver acciones realizadas sobre los resultados de la búsqueda

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!

Deja una respuesta