Foto cortesía de Qole Pejorian
Además de la operación básica de buscar archivos en una estructura de directorios, también puede realizar varias operaciones prácticas utilizando el comando de búsqueda que facilitará su recorrido por la línea de comandos.
En este artículo, repasemos 15 ejemplos prácticos del comando de búsqueda de Linux que serán muy útiles tanto para principiantes como para expertos.
Primero, cree los siguientes archivos vacíos de muestra en su directorio de inicio para probar algunos de los ejemplos de comandos de búsqueda que se mencionan a continuación.
# vim create_sample_files.sh touch MybashProgram.sh touch mycprogram.c touch MyCProgram.c touch Program.c mkdir backup cd backup touch MybashProgram.sh touch mycprogram.c touch MyCProgram.c touch Program.c # chmod +x create_sample_files.sh # ./create_sample_files.sh # ls -R .: backup MybashProgram.sh MyCProgram.c create_sample_files.sh mycprogram.c Program.c ./backup: MybashProgram.sh mycprogram.c MyCProgram.c Program.c
1. Buscar archivos usando el nombre
Este es un uso básico del comando de búsqueda. Este ejemplo encuentra todos los archivos con el nombre — MyCProgram.c en el directorio actual y todos sus subdirectorios.
# find -name "MyCProgram.c" ./backup/MyCProgram.c ./MyCProgram.c
2. Buscar archivos usando el nombre e ignorando mayúsculas y minúsculas
Este es un uso básico del comando de búsqueda. Este ejemplo encuentra todos los archivos con nombre:MyCProgram.c (ignorando el caso) en el directorio actual y todos sus subdirectorios.
# find -iname "MyCProgram.c" ./mycprogram.c ./backup/mycprogram.c ./backup/MyCProgram.c ./MyCProgram.c
3. Limite la búsqueda a un nivel de directorio específico usando profundidad mínima y profundidad máxima
Busque el archivo passwd en todos los subdirectorios a partir del directorio raíz.
# find / -name passwd ./usr/share/doc/nss_ldap-253/pam.d/passwd ./usr/bin/passwd ./etc/pam.d/passwd ./etc/passwd
Encuentre el archivo passwd debajo de la raíz y un nivel más abajo. (es decir, raíz:nivel 1 y un subdirectorio:nivel 2)
# find -maxdepth 2 -name passwd ./etc/passwd
Encuentre el archivo passwd debajo de la raíz y dos niveles más abajo. (es decir, raíz:nivel 1 y dos subdirectorios:nivel 2 y 3)
# find / -maxdepth 3 -name passwd ./usr/bin/passwd ./etc/pam.d/passwd ./etc/passwd
Encuentre el archivo de contraseñas entre los niveles de subdirectorio 2 y 4.
# find -mindepth 3 -maxdepth 5 -name passwd ./usr/bin/passwd ./etc/pam.d/passwd
4. Ejecutar comandos en los archivos encontrados por el comando Buscar.
En el siguiente ejemplo, el comando de búsqueda calcula la suma md5 de todos los archivos con el nombre MyCProgram.c (ignorando mayúsculas y minúsculas). {} se reemplaza por el nombre de archivo actual.
# find -iname "MyCProgram.c" -exec md5sum {} \; d41d8cd98f00b204e9800998ecf8427e ./mycprogram.c d41d8cd98f00b204e9800998ecf8427e ./backup/mycprogram.c d41d8cd98f00b204e9800998ecf8427e ./backup/MyCProgram.c d41d8cd98f00b204e9800998ecf8427e ./MyCProgram.c
5. Invirtiendo el partido.
Muestra los archivos o directorios cuyo nombre no es MyCProgram.c. Dado que la profundidad máxima es 1, solo se verá en el directorio actual.
# find -maxdepth 1 -not -iname "MyCProgram.c" . ./MybashProgram.sh ./create_sample_files.sh ./backup ./Program.c
6. Búsqueda de archivos por su número de inodo.
Cada archivo tiene un número de inodo único, con eso podemos identificar ese archivo. Cree dos archivos con un nombre similar. es decir, un archivo con un espacio al final.
# touch "test-file-name" # touch "test-file-name " [Note: There is a space at the end] # ls -1 test* test-file-name test-file-name
Desde la salida de ls, no puede identificar qué archivo tiene el espacio al final. Con la opción -i, puede ver el número de inodo del archivo, que será diferente para estos dos archivos.
# ls -i1 test* 16187429 test-file-name 16187430 test-file-name
Puede especificar el número de inodo en un comando de búsqueda como se muestra a continuación. En este ejemplo, el comando de búsqueda cambia el nombre de un archivo usando el número de inodo.
# find -inum 16187430 -exec mv {} new-test-file-name \; # ls -i1 *test* 16187430 new-test-file-name 16187429 test-file-name
Puede utilizar esta técnica cuando desee realizar alguna operación con los archivos que tienen un nombre deficiente, como se muestra en el siguiente ejemplo. Por ejemplo, el archivo con el nombre — ¿archivo?.txt tiene un carácter especial. Si intenta ejecutar "archivo rm? .txt", se eliminarán los tres archivos siguientes. Por lo tanto, siga los pasos a continuación para eliminar solo el archivo "file?.txt".
# ls file1.txt file2.txt file?.txt
Encuentre los números de inodo de cada archivo.
# ls -i1 804178 file1.txt 804179 file2.txt 804180 file?.txt
Utilice el número de inodo para eliminar el archivo que tenía un carácter especial, como se muestra a continuación.
# find -inum 804180 -exec rm {} \; # ls file1.txt file2.txt [Note: The file with name "file?.txt" is now removed]
7. Buscar archivo basado en los permisos de archivo
Las siguientes operaciones son posibles.
- Encuentre archivos que coincidan exactamente con el permiso
- Compruebe si el permiso otorgado coincide, independientemente de otros bits de permiso
- Buscar dando representación octal/simbólica
Para este ejemplo, supongamos que el directorio contiene los siguientes archivos. Tenga en cuenta que los permisos de archivo en estos archivos son diferentes.
# ls -l total 0 -rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all -rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read ---------- 1 root root 0 2009-02-19 20:31 no_for_all -rw------- 1 root root 0 2009-02-19 20:29 ordinary_file -rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read ----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read
Encuentre archivos que tengan permiso de lectura para agrupar. Utilice el siguiente comando para encontrar todos los archivos que todo el mundo puede leer en su directorio de inicio, independientemente de otros permisos para ese archivo.
# find . -perm -g=r -type f -exec ls -l {} \; -rw-r--r-- 1 root root 0 2009-02-19 20:30 ./everybody_read -rwxrwxrwx 1 root root 0 2009-02-19 20:31 ./all_for_all ----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read -rw-r----- 1 root root 0 2009-02-19 20:27 ./others_can_also_read
Encuentre archivos que tengan permiso de lectura solo para agrupar.
# find . -perm g=r -type f -exec ls -l {} \; ----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read
Encuentre archivos que tengan permiso de lectura solo para agrupar [buscar por octal]
# find . -perm 040 -type f -exec ls -l {} \; ----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read
8. Encuentre todos los archivos vacíos (archivo de cero bytes) en su directorio de inicio y su subdirectorio
La mayoría de los archivos de la siguiente salida de comando serán archivos de bloqueo y marcadores de posición creados por otras aplicaciones.
# find ~ -empty
Enumere todos los archivos vacíos solo en su directorio de inicio.
# find . -maxdepth 1 -empty
Enumere solo los archivos vacíos no ocultos solo en el directorio actual.
# find . -maxdepth 1 -empty -not -name ".*"
9. Encontrar los 5 archivos grandes principales
El siguiente comando mostrará los 5 archivos más grandes del directorio actual y su subdirectorio. Esto puede tardar un tiempo en ejecutarse dependiendo de la cantidad total de archivos que el comando tenga que procesar.
# find . -type f -exec ls -s {} \; | sort -n -r | head -5
10. Encontrar los 5 archivos pequeños principales
La técnica es la misma que para encontrar los archivos más grandes, pero la única diferencia es el orden ascendente.
# find . -type f -exec ls -s {} \; | sort -n | head -5
En el comando anterior, lo más probable es que solo vea los archivos de CERO bytes (archivos vacíos). Por lo tanto, puede usar el siguiente comando para enumerar los archivos más pequeños que no sean los archivos de bytes CERO.
# find . -not -empty -type f -exec ls -s {} \; | sort -n | head -5
11. Buscar archivos según el tipo de archivo usando la opción -type
Encuentre solo los archivos de socket.
# find . -type s
Buscar todos los directorios
# find . -type d
Encuentra solo los archivos normales
# find . -type f
Encuentra todos los archivos ocultos
# find . -type f -name ".*"
Encuentra todos los directorios ocultos
# find -type d -name ".*"
12. Encuentre archivos comparándolos con el tiempo de modificación de otro archivo.
Muestra los archivos que se modifican después del archivo especificado. El siguiente comando de búsqueda muestra todos los archivos que se crean/modifican después de ordinario_archivo.
# ls -lrt total 0 -rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read ----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read -rw------- 1 root root 0 2009-02-19 20:29 ordinary_file -rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read -rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all ---------- 1 root root 0 2009-02-19 20:31 no_for_all # find -newer ordinary_file . ./everybody_read ./all_for_all ./no_for_all
13. Buscar archivos por tamaño
Con la opción -size puede buscar archivos por tamaño.
Encuentra archivos más grandes que el tamaño dado
# find ~ -size +100M
Encuentra archivos más pequeños que el tamaño dado
# find ~ -size -100M
Encuentre archivos que coincidan exactamente con el tamaño dado
# find ~ -size 100M
Nota:– significa menos que el tamaño dado, + significa más que el tamaño dado y ningún símbolo significa el tamaño exacto dado.
14. Crear alias para operaciones de búsqueda frecuentes
Si encuentra algo bastante útil, puede convertirlo en un alias. Y ejecútalo cuando quieras.
Elimine los archivos llamados a.out con frecuencia.
# alias rmao="find . -iname a.out -exec rm {} \;" # rmao
Eliminar los archivos principales generados por el programa c.
# alias rmc="find . -iname core -exec rm {} \;" # rmc
15. Elimine archivos grandes usando el comando de búsqueda
El siguiente comando elimina los archivos *.zip que tienen más de 100M.
# find / -type f -name *.zip -size +100M -exec rm -i {} \;"
Elimine todos los archivos *.tar que tengan más de 100M usando el alias rm100m (Eliminar 100M). Utilice conceptos similares y cree alias como rm1g, rm2g, rm5g para eliminar el tamaño de archivo superior a 1G, 2G y 5G respectivamente.
# alias rm100m="find / -type f -name *.tar -size +100M -exec rm -i {} \;" # alias rm1g="find / -type f -name *.tar -size +1G -exec rm -i {} \;" # alias rm2g="find / -type f -name *.tar -size +2G -exec rm -i {} \;" # alias rm5g="find / -type f -name *.tar -size +5G -exec rm -i {} \;" # rm100m # rm1g # rm2g # rm5g
Buscar ejemplos de comandos, segunda parte
Si te gustó este artículo de mamá sobre el comando de búsqueda, no olvides consultar el artículo de papá sobre el comando de búsqueda:¡Papá, lo encontré!, 15 impresionantes ejemplos de comandos de búsqueda de Linux (Parte 2)
Impresionantes artículos de Linux
Los siguientes son algunos 15 ejemplos impresionantes artículos que pueden resultarle útiles.
- 15 ejemplos para dominar el historial de línea de comandos de Linux
- Comando Unix LS:15 ejemplos prácticos
- ¡Contrólate con el Grep! – 15 ejemplos prácticos de comandos Grep
- Linux Crontab:15 impresionantes ejemplos de trabajos de Cron