Réponses:
Si vous utilisez bash
dans une version récente, vous pouvez bénéficier de l' globstar
option:
shopt -s globstar
mv **/*.pdf papers/
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
"{}"
pour traiter les noms de fichiers contenant des espaces?
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.
-print0
à votre recherche et -0
à xargs.
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
Si vous ne recherchez qu'un seul répertoire en profondeur, vous pouvez faire:
mkdir <destination>
mv */*.pdf <destination>
où <destination>
représente un répertoire. mv
ne créera pas automatiquement de répertoire pour vous.
a/x.pdf
etb/x.pdf
?