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

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *