Respuestas:
Para completar las respuestas existentes:
ls
La utilidad de lista de directorio predeterminada ls
se puede usar en combinación con los comodines del shell. Para buscar todos los archivos con patrón abc
:
ls abc* # list all files starting with abc---
ls *abc* # list all files containing --abc--
ls *abc # list all files ending with --abc
Tenga en cuenta que la extensión del archivo también es relevante para los resultados de búsqueda.
tree
En caso de que necesitemos enumerar archivos en un árbol de directorios, también podemos emitir tree
para buscar un patrón dado como:
tree -P 'abc*' # list directory tree of file starting with abc---
tree -l 'def*' # exclude files starting with def---
En este caso, tree
sí admite comodines.
ls
un directorio, lo abre, es lo mismo que hacer ls -l BirthdayPhotos
. Puede suprimir ese comportamiento con ls -d B*
.
B*
como una especificación de directorio?
B*
expande para coincidir con todos los directorios que comienzan, por B
lo que realmente está pasando ls
una lista de directorios, por lo que los abre todos para usted.
ls -d ABC*
era sobre lo que el autor preguntaba. También los comentarios en el fragmento de código son incorrectos, ls abc*
enumera el contenido de los directorios que comienzan con abc.
Puede usar el find
comando para buscar archivos con patrón
find . -type f -name "abc*"
El comando anterior buscará el archivo que comienza con abc en el directorio de trabajo actual.
-name 'abc'
enumerará los archivos que coinciden exactamente. Por ejemplo: abc
También puedes usar
-iname
-regex
opción con find
comando para buscar nombre de archivo usando un patrón
Hay muchas formas de hacerlo, dependiendo exactamente de lo que quieras hacer con ellos. En general, si solo desea enumerarlos, puede hacerlo en una terminal usando:
find | grep '^\./ABC'
... y reemplazando ABC
con su texto.
Para entender el comando, analicemos un poco:
find
enumera todos los archivos en el directorio actual y sus subdirectorios; usarlo solo enumerará todo allí. Tenga en cuenta que find
genera cada archivo o directorio que comienza con ./
, lo que indica que su ruta es relativa al directorio actual. Ser consciente de esto es importante porque significa que buscaremos resultados que comiencen ./ABC
y no solo ABC
.
El carácter de canalización |
redirige la salida de un comando a otro, en este caso la salida de find
se redirige a grep
. Esto se llama tubería.
grep
toma la salida y lo filtra utilizando el patrón dado, ^\./ABC
.
' '
para evitar que el intérprete interprete los caracteres especiales que contiene.Ahora el patrón en sí está escrito en una sintaxis particular llamada expresión regular , o expresión regular para abreviar. Regex es una herramienta de búsqueda extremadamente poderosa si la dominas, y hay sitios como este que te enseñan sobre ello con más profundidad, pero ten en cuenta que grep
no es un motor de expresiones regulares completo y no puedes hacer todo con él.
Para nuestro propósito:
^
en regex coincide con el comienzo de la cadena; esto evita que coincida con el patrón si no aparece al comienzo del nombre del archivo.
.
en regex también tiene un significado especial: significa "hacer coincidir cualquier carácter aquí". En caso de que quiera usarlo como un punto literal, tendrá que "escapar" usando una barra invertida \
antes. (Sí, emparejar cualquier personaje sería inofensivo en nuestro caso, pero lo hice por completo).
find | grep
cuando find
tiene sus propias capacidades de coincidencia de patrones perfectamente buenas?
puede usar GREP, creo que esta es la solución más simple, probablemente también agregue algunos otros parámetros grep para que la coincidencia sea más precisa
tree | grep ABC
Puede buscar un patrón en particular utilizando el administrador de archivos Nautilus y las expresiones regulares.
Para hacerlo, haga clic en Seleccionar elementos que coincidan en el menú de engranaje como se muestra a continuación (también puede presionar Ctrl+ s).
Luego, simplemente escriba la expresión regular ABC*
y valide.
Cada archivo cuyo nombre coincida con su patrón se seleccionará automáticamente.
Estoy usando Nautilus 3.6. * De GNOME3 PPA en Ubuntu 12.10 (Quantal).
La solución más fácil para mí
ls | grep PATTERN
Aquí puede dar cualquier expresión regular en el PATRÓN.
Por ejemplo, para buscar archivos con "ab" en cualquier lugar dentro de su nombre, escriba
ls | grep ".*ab.*"
Para buscar los archivos que comienzan con "ab", escriba
ls | grep "^ab"
Si no conoce el directorio en el ABC*
que se encuentran los archivos y tiene millones de archivos, el locate
comando es el método más rápido.
$ locate /ABC
/mnt/clone/home/rick/.cache/mozilla/firefox/9fu0cuql.default/cache2/entries/ABC6AD2FEC16465049B48D39FD2FE538258F2A34
/mnt/clone/home/rick/.cache/mozilla/firefox/9fu0cuql.default/cache2/entries/ABCBFDA54262F47253F95ED6ED4131A465EE0E39
/mnt/clone/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCABC.sh
/mnt/clone/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCDBCDA.sh
/mnt/clone/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCDBDDA.sh
/mnt/old/home/rick/.cache/mozilla/firefox/3vkvi6ov.default/cache2/entries/ABC0C99FCEABAD0C6AA2078CD025A1CDE48D7BA1
/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCABC.sh
/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCDBCDA.sh
/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCDBDDA.sh
Notas:
find
comando que comienza en el /
directorio raíz llevará mucho tiempo y generará muchos errores de permiso.sudo updatedb
primero debe ejecutarlos .yo suelo
ls | grep abc
o
ls -la | grep abc
Muestra todos los archivos con abc, no solo comienza con abc. Pero, es una manera realmente fácil para mí de hacer esto.
Pitón:
$ python -c 'import sys,os;found=[os.path.join(r,i) for r,s,f in os.walk(".") for i in f if i.startswith("ABC")];map(lambda x: sys.stdout.write(x+"\n") ,found)'
Perl:
$ perl -le 'use File::Find;find(sub{ -f && $_ =~/^ABC/ && print $File::Find::name },".")'
printf "%s" /path/to/files/ABC*
Esta es una coincidencia de patrón glob que está anclada en ambos extremos. Esto coincidirá con todas las apariciones de archivos que comienzan con "ABC", como "ABC", "ABC.txt", "ABC123", pero no "xABC". Desde la línea de comando usando 'ls' en lugar de 'printf' aquí hay una alternativa segura, sin embargo, dependiendo de con quién esté de acuerdo, 'ls' no es seguro para usar en un script. En ese caso, usar 'printf' con coincidencia de patrón global se considera seguro. Si va a usar esto en un script, la salida de 'printf' no contendrá un nuevo carácter de línea hasta el final de la secuencia de salida como tal:
printf "%s" /path/to/files/ABC*
Devoluciones:
/path/to/files/ABC /path/to/files/ABC123
Si necesita saltos de línea después de cada instancia:
printf "%s\n" /path/to/files/ABC*
Devoluciones:
/path/to/files/ABC
/path/to/files/ABC123
"/ ruta / a / archivos /" permanece en la salida si lo ingresó de esa manera cuando ejecutó el comando 'printf'. Sin él solo aparece el nombre del archivo:
printf "%s" ABC*
Devoluciones
ABC ABC123
Suponiendo que ejecuta el comando dentro del directorio en el que existen los archivos.
echo /path/to/files/ABC* | tr " " "\n"
no es una buena idea. Considere si hay un archivo /path/to/files/ABC EFG
, hay un espacio en el nombre del archivo. Su tr
dividirá el nombre del archivo en dos líneas separadas, lo que no es bueno. Peor aún si hay múltiples espacios en el nombre del archivo. En su printf "%s\n" ABC*
lugar, le recomiendo que use , lo que debería ayudar con espacios en los nombres de archivo, pero sigue siendo problemático con otros caracteres especiales como\n
Command-t en uno de mis complementos vim favoritos, es un complemento basado en ruby que está por encima de la integración con FZF.
Mediante el uso de Comamnd-T y FZF, puede realizar la búsqueda con un mecanismo "difuso" extremadamente rápido para:
Como puedes ver
Siempre busco en el historial de comandos abriendo una nueva terminal y presiono:
CTRL+R
Además de buscar en todas las carpetas de forma recursiva escribiendo en cualquier pestaña de terminal:
fzf
Luego comienza tu nombre de archivo
ABC
Además, puedes escribir adentro vim
:CommandT
Realmente útil especialmente en carpetas grandes.
Suponga que estoy en el directorio raíz y solo quiero la lista del directorio etc: escribimos,
find -type d -name "etc"
resultado que obtenemos,
[root@unix /]# find -type d -name "etc"
./etc
./usr/lib/firefox/bundled/etc
./usr/lib/unix-yarn/etc
./usr/lib/unix/etc
./usr/lib/festival/etc
./usr/bin/lib/vmware-tools/lib64/libconf/etc
./usr/bin/lib/vmware-tools/lib32/libconf/etc
./usr/etc
./usr/share/doc/oddjob-0.30/sample/etc
./usr/share/festival/lib/etc
./usr/local/etc
./usr/java/jdk1.7.0_25/lib/visualvm/etc
./home/user1/Desktop/VMware Tools/vmware-tools-distrib/lib/lib64/libconf/etc
./home/user1/Desktop/VMware Tools/vmware-tools-distrib/lib/lib32/libconf/etc
./home/user1/Desktop/VMware Tools/vmware-tools-distrib/etc
./home/user1/Desktop/VMware Tools/vmware-tools-distrib/caf/etc
Otro ejemplo,
También podemos escribir:
ls | grep "etc"
obtenemos,
etc
ls -l B*
, muestra el contenido de todos los directorios que comienzan enB
lugar de solo los nombres de los directorios coincidentes?