Estoy intentando a la lista de todos los archivos de dir1
, dir2
, dir3
y dir4
que podría estar en cualquier parte como un subdirectorio de mi cwd
usando el find
comando. Intenté lo siguiente sin éxito:
find . -type f -regextype posix-egrep -regex 'dir1/.+|dir2/.+|dir3/.+|dir4/.+'
Lo intenté posix-extended
también. ¿Cómo puedo enumerar estos archivos?
bash
find
regular-expression
Aaron
fuente
fuente
Respuestas:
Y si desea buscar tres carpetas con el nombre
foo
,bar
ybaz
para todos los*.py
archivos, use este comando:find foo bar baz -name "*.py"
así que si quieres mostrar archivos de
dir1
dir2
dir3
usofind dir1 dir2 dir3 -type f
prueba esto
find . \( -name "dir1" -o -name "dir2" \) -exec ls '{}' \;
fuente
./dir
lugar dedir
./path/to/dir1
), en cuyo caso./dir1
no existiría.Es mejor usar la directiva -path:
Lo que significa: encontrar todos los archivos en el directorio actual donde hay 'dir1' o 'dir2' o 'dir3' o 'dir4' en la ruta.
fuente
-a
y-o
para el equivalente estándar de GNU's-and
/-or
.Solo para que todos lo sepan. Agregar
.*/
antes de cada unodir
resolvió el problema, yaregex
que parece coincidir con la ruta completa que parece.fuente
Esta es mi primera idea después de leer las respuestas anteriores:
Esto tiene en cuenta que la expresión regular debe coincidir con el nombre de archivo completo y es más fácil de entender.
fuente
Muestra de búsqueda rápida (!) De archivos particulares (access_log) en múltiples ubicaciones definidas por comodines (directorio de inicio) y el directorio general de registro apache2 aplicando también el filtrado de nombres para excluir registros ssl y registros antiguos comprimidos. No responde directamente a la pregunta aquí, pero podría ser útil para alguien que encontró estas instrucciones (como yo).
Tenga cuidado con los espacios, especialmente cerca de
\(
y\)
.Por cierto, lo usé para apachetop, para encontrar los sitios web más activos en mi servidor.
fuente
no necesita especificar dir1 a dir4 por nombre si está utilizando regextype
type f
: buscar archivos, no directoriosregextype sed
: utiliza sed regextyperegex
: busca utilizando expresiones regulares en toda la ruta".*/dir[1-4]/[a-z0-9]*"
:. * al principio significa cualquier número de caracteres que podrían ser de tipo (char / number / backslash (/), etc.); dir [1-4] significa buscar "dir" seguido de un número entre 1 y 4; / [^ /] * indica que después de dir1-4 omite cualquier nombre de ruta que tenga / en ellos, por lo que solo devuelve archivos en el directorio dir1-dir4 e ignora cualquier subdirectorio que pueda estar dentro de dir1-dir4.creó un directorio para que lo pruebe: https://github.com/alphaCTzo7G/stackexchange/tree/master/linux/findSolution04092017
fuente
red
,green
,blue
yyellow
, o podrían serJohn
,Paul
,George
yRingo
.) Su respuesta supone que son , literalmentedir1
,dir2
,dir3
ydir4
. … (Continúa)foo_bar
,foo.txt
yFOO
)? (4) ¿Por qué su texto explica/[^/]*
cuando su respuesta no lo usa?Sé que especificaste que usando find, pero solo para mostrar otras opciones que se pueden usar, puedes usar xargs:
Puede tener un archivo llamado "carpetas" que contenga algo como:
Entonces, puedes hacer algo como esto:
xargs en mi opinión, me siento más versátil que find -exec. También puedes hacer cosas locas como
fuente