Comment puis-je copier récursivement tous les fichiers pdf d'un répertoire (et de ses sous-répertoires) dans un seul répertoire de sortie?


20

J'ai un répertoire contenant un grand nombre de fichiers PDF, dont certains sont dans des sous-répertoires (qui peuvent s'étendre sur plusieurs couches). Je voudrais déplacer tous les fichiers correspondants *.pdfdans un seul dossier de sortie nommé papers.

Comment puis-je faire ceci?


1
Comment aimeriez-vous gérer le cas où il y a deux fichiers a/x.pdfet b/x.pdf?
Colonel Panic,

Réponses:



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

Voici un test que j'ai fait

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

./a:
foo.pdf

./pdfs:

Notez le fichier "aaa bbb.pdf".

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

./a:

./pdfs:
aaa bbb.pdf  foo.pdf

Magnifique! +1!
PenguinCoder

Vous n'avez pas besoin de citer "{}"pour traiter les noms de fichiers contenant des espaces?
terdon

@terdon: En fait, non, vous ne le faites pas (bien que ce genre de problème me rattrape parfois). Voir la réponse mise à jour.
RedGrittyBrick

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

(similaire à une autre réponse mais je préfère pipe / xargs / mv ... plus intuitif pour moi)

Pour info, j'ai fait le script d'une ligne ci-dessus avec succès sur plusieurs répertoires et plusieurs fichiers pdf.


1
xargs a le problème des "espaces dans les noms de fichiers" que -exec n'a pas. Vous pouvez arbitrer quelque peu cela en ajoutant des arguments -print0à votre recherche et -0à xargs.
Rich Homolka

@RichHomolka voir la réponse modifiée. (Merci pour l'astuce. C'est vraiment utile!)
Trevor Boyd Smith

Avez-vous déjà essayé ça? Il semble que vous devez ajouter le "-print0" à la fin de la commande find
tollo

0

Pour la ligne de commande Windows (cmd.exe), vous pouvez utiliser:

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

1
Salut et bienvenue à SU. Merci pour votre réponse, mais la question demande spécifiquement une solution Linux.
terdon

2
C'est toujours merveilleux que les fenêtres puissent faire ça aussi!
Vorac

0

Si vous ne recherchez qu'un seul répertoire en profondeur, vous pouvez faire:

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

<destination>représente un répertoire. mvne créera pas automatiquement de répertoire pour vous.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.