¿Cuáles son los motivos para hacer una búsqueda de archivos con find? Son muchas las razones por las que nos interesaría buscar archivos dentro de nuestro sistema, entre las cuales podríamos mencionar las siguientes.
Vamos a necesitar realizar una búsqueda de archivos con find cuando querramos:
- trabajar con un archivo que no sabemos o no recordamos dónde se encuentra.
- identificar archivos
- por propietario o grupo dueño.
- por fecha de modificación
- por permisos asignados
- por tipo de archivo (archivo, directorio, etc)
- combinando los criterios anteriores
- etc.
En este post y en el siguiente aprenderemos a utilizar el comando find para realizar estas tareas y cómo realizar una acción sobre los resultados de nuestras búsquedas.
Búsqueda de archivos con find por nombre
Para buscar un archivo por nombre, utilizamos find seguido del directorio a partir del cual deseamos realizar la búsqueda, de la opción -name (o -iname si deseamos ignorar mayúsculas y minúsculas), y finalmente el nombre del archivo.
Si utilizamos un comodín (*) en el nombre del archivo como criterio de búsqueda, deberemos encerrar el mismo entre comillas para evitar que la shell lo expanda (lo cual sucedería ANTES de efectuar la búsqueda propiamente dicha).
Para ilustrar, crearemos un directorio llamado pruebas y un archivo vacío dentro del mismo con el nombre martin.txt:
[pastacode lang=»bash» manual=»mkdir%20pruebas%0Atouch%20pruebas%2Fmartin.txt» message=»» highlight=»» provider=»manual»/]
y deberemos tener en el directorio actual el archivo martinfierroCap1.txt.
Veamos en la Fig. 1 qué sucede cuando usamos como criterio de búsqueda martin* y ‘martin*’ (podemos utilizar el comando echo para ver la diferencia antes):
[pastacode lang=»bash» manual=»echo%20find%20.%20-name%20martin*%0Aecho%20find%20.%20-name%20’martin*’%0Afind%20.%20-name%20martin*%0Afind%20.%20-name%20’martin*'» message=»» highlight=»» provider=»manual»/]
En el segundo ejemplo, se muestran los resultados «correctos» ya que la shell no expande el comodín tal como lo hace en el primer caso.
Búsqueda de archivos con find por usuario o fecha de modificación
Para restringir la búsqueda a archivos propiamente dichos podemos utilizar la opción -type seguida por f. Si, por el contrario, quisiéramos buscar directorios únicamente, utilizaríamos -type d. Si queremos especificar el usuario dueño del archivo usaremos -user seguido por el nombre del usuario. Si nos acordamos que estuvimos modificando el archivo dentro de los últimos 15 días, podemos utilizar la opción -mtime seguida del número -15.
Usemos las opciones mencionadas en el párrafo anterior para buscar todos los archivos con find dentro del directorio /etc cuyo dueño sea el usuario root y que fueron modificados exactamente hace 2 meses (60 días):
[pastacode lang=»bash» manual=»find%20%2Fetc%20-type%20f%20-user%20root%20-mtime%2060″ message=»» highlight=»» provider=»manual»/]
Si quisiéramos ver la misma lista de archivos que fueron modificados hace más de un cierto número de días, deberemos usar dicha cantidad con el signo + delante. En resumen:
- -mtime x: archivos modificados exactamente hace x*24 horas (lo cual se traduce en «x» cantidad de días).
- -mtime -x: modificados durante los últimos «x» días.
- -mtime +x: modificados hace más de «x» días.
En el próximo post veremos cómo utilizar otros criterios de búsqueda y cómo ejecutar una acción determinada sobre los archivos resultantes. ¡Hasta la próxima!