Ls recursiva con condiciones

16

¿Por qué no puedo usar un comando como este para encontrar todos los archivos pdf en un directorio y subdirectorios? ¿Cómo lo hago? (Estoy usando bash en ubuntu)

ls -R *.pdf

EDITAR

¿Cómo haría para eliminar todos estos archivos?

Tomba
fuente

Respuestas:

22

¿Por qué no puedo usar un comando como este para encontrar todos los archivos pdf en un directorio y subdirectorios?

El comodín *.pdfen su comando se expande basha todos los archivos coincidentes en el directorio actual, antes de ejecutarse ls.


¿Cómo lo hago? (Estoy usando bash en ubuntu)

encontrar es tu respuesta.

find . -name \*.pdf

es una lista recursiva de archivos pdf. -inamees una coincidencia entre mayúsculas y minúsculas, así que

find . -iname \*.pdf

enumera todos los archivos .pdf, incluidos, por ejemplo, foo.PDF

Además, puede usar ls para un número limitado de subcarpetas, por ejemplo

ls *.pdf */*.pdf

para encontrar todos los archivos pdf en subcarpetas (coincide con bar / foo.pdf, no con bar / foo / asdf.pdf y no con foo.PDF).

Si desea eliminar los archivos encontrados con find, puede usar

find . -iname \*.pdf -delete
Olli
fuente
1
En caso de que desee una salida similar al ls -lcomando, que muestre el tamaño del archivo, la propiedad, la fecha, etc., puede usar findcon la -lsopción, por ejemplofind . -name \*.pdf -ls
RFVoltolini
2

Como otros han dicho, encontrar es la respuesta.

Ahora para responder a la otra parte.

  • ¿Cómo haría para eliminar todos estos archivos?

    encontrar . -iname * .pdf -exec rm {} \;

Deberías hacerlo.

Matt H
fuente
2
Debe citar su globo para evitar que se expanda prematuramente.
Pausado hasta nuevo aviso.
1

Use find en lugar de ls

find . -name '*.pdf'
vartec
fuente