¿Cómo puedo copiar recursivamente todos los archivos pdf en un directorio (y sus subdirectorios) en un único directorio de salida?


20

Tengo un directorio que contiene una gran cantidad de archivos PDF, algunos de los cuales están en subdirectorios (que pueden extenderse varias capas de profundidad). Me gustaría mover todos los archivos que coincidan *.pdfen una sola carpeta de salida llamada papers.

¿Cómo puedo hacer esto?


1
¿Cómo le gustaría manejar el caso de que haya dos archivos a/x.pdfy b/x.pdf?
Coronel Panic

Respuestas:



30
  find /bunchopdfs -name "*.pdf" -exec mv {} /papers \;    

Aquí hay una prueba que hice

$ ls -R
.:
a  aaa bbb.pdf  pdfs

./a:
foo.pdf

./pdfs:

Observe el archivo "aaa bbb.pdf".

$ find . -name "*pdf" -exec mv {} pdfs \;
$ ls -R
.:
a  pdfs

./a:

./pdfs:
aaa bbb.pdf  foo.pdf

¡Hermosa! +1!
PenguinCoder

¿No necesita comillas "{}"para tratar con nombres de archivos que contienen espacios?
terdon

@terdon: En realidad, no, no lo haces (aunque ese tipo de problema me atrapa a veces). Ver respuesta actualizada.
RedGrittyBrick

4
find -print0 /directory/with/pdfs -iname "*.pdf" | xargs -0 mv -t /papers

(similar a otra respuesta pero prefiero pipe / xargs / mv ... más intuitivo para mí)

Para su información, hice el script de una línea anterior con éxito en varios directorios y múltiples archivos pdf.


1
xargs tiene el problema de "espacios en los nombres de archivo" que -exec no tiene. Puede mediar esto un poco agregando args -print0a su búsqueda y -0xargs.
Rich Homolka

@RichHomolka ver la respuesta cambiada. (Gracias por la sugerencia. ¡Eso es realmente útil!)
Trevor Boyd Smith

¿Has probado eso alguna vez? Parece que necesita agregar el "-print0" al final del comando de búsqueda
tollo

0

Para la línea de comandos de Windows (cmd.exe), puede usar:

for /F "usebackq delims==" %j IN (`dir /s /b *.pdf`) do copy "%j" c:\target_dir

1
Hola y bienvenido a SU. Gracias por su respuesta, pero la pregunta solicita específicamente una solución de Linux.
terdon

2
¡Todavía es maravilloso que Windows también pueda hacer eso!
Vorac

0

Si solo busca en un directorio profundo, puede hacer:

mkdir <destination>
mv */*.pdf <destination>

donde <destination>representa algún directorio. mvno creará automáticamente un directorio para usted.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.