Wie kann ich rekursiv alle PDF-Dateien in einem Verzeichnis (und seinen Unterverzeichnissen) in ein einzelnes Ausgabeverzeichnis kopieren?

20

Ich habe ein Verzeichnis mit einer großen Anzahl von PDF-Dateien, von denen sich einige in Unterverzeichnissen befinden (die sich über mehrere Ebenen erstrecken können). Ich möchte alle passenden Dateien *.pdfin einen einzigen Ausgabeordner namens verschieben papers.

Wie kann ich das machen?

blz
quelle
1
Wie möchten Sie mit dem Fall umgehen, dass es zwei Akten gibt a/x.pdfund b/x.pdf?
Oberst Panic

Antworten:

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

Hier ist ein Test, den ich gemacht habe

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

./a:
foo.pdf

./pdfs:

Beachten Sie die Datei "aaa bbb.pdf".

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

./a:

./pdfs:
aaa bbb.pdf  foo.pdf
RedGrittyBrick
quelle
Schön! +1!
PenguinCoder
Müssen Sie nicht zitieren "{}", um mit Dateinamen mit Leerzeichen umzugehen?
Terdon
@terdon: Tatsächlich, nein, das tust du nicht (obwohl mich solche Probleme manchmal überraschen). Siehe aktualisierte Antwort.
RedGrittyBrick
4
find -print0 /directory/with/pdfs -iname "*.pdf" | xargs -0 mv -t /papers

(ähnlich einer anderen Antwort, aber ich bevorzuge pipe / xargs / mv ... intuitiver für mich)

Zu Ihrer Information, ich habe das obige einzeilige Skript erfolgreich für mehrere Verzeichnisse und mehrere PDF-Dateien ausgeführt.

Trevor Boyd Smith
quelle
1
xargs hat das Problem von "Leerzeichen in Dateinamen", was -exec nicht tut. Sie können dies etwas vermitteln, indem Sie -print0Ihrem Fund und -0xargs Argumente hinzufügen .
Rich Homolka
@RichHomolka siehe geänderte Antwort. (Danke für den Tipp. Das ist wirklich nützlich!)
Trevor Boyd Smith
Hast du das schon mal probiert? Sieht so aus, als müssten Sie "-print0" am Ende des Suchbefehls hinzufügen
tollo
0

Für die Windows-Befehlszeile (cmd.exe) können Sie Folgendes verwenden:

for /F "usebackq delims==" %j IN (`dir /s /b *.pdf`) do copy "%j" c:\target_dir
JackyBill
quelle
1
Hallo und willkommen in SU. Vielen Dank für Ihre Antwort, aber die Frage erfordert speziell eine Linux-Lösung.
Terdon
2
Es ist immer noch wunderbar, dass Fenster das auch können!
Vorac
0

Wenn Sie nur ein einziges Verzeichnis durchsuchen, können Sie Folgendes tun:

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

wo <destination>steht für ein Verzeichnis. mverstellt nicht automatisch ein Verzeichnis für Sie.

Kevin Dong
quelle