Bagaimana saya bisa secara rekursif menyalin semua file pdf dalam direktori (dan ini adalah subdirektori) ke direktori output tunggal?

20

Saya memiliki direktori yang berisi sejumlah besar file PDF, beberapa di antaranya berada di subdirektori (yang dapat memperpanjang beberapa lapisan). Saya ingin memindahkan semua file yang cocok *.pdfke folder keluaran tunggal bernama papers.

Bagaimana saya bisa melakukan ini?

blz
sumber
1
Bagaimana Anda ingin menangani kasus ini dengan dua file a/x.pdfdan b/x.pdf?
Kolonel Panic

Jawaban:

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

Inilah tes yang saya lakukan

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

./a:
foo.pdf

./pdfs:

Perhatikan file "aaa bbb.pdf".

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

./a:

./pdfs:
aaa bbb.pdf  foo.pdf
RedGrittyBrick
sumber
Indah! +1!
PenguinCoder
Apakah Anda tidak perlu mengutip "{}"untuk berurusan dengan nama file yang mengandung spasi?
terdon
@terdon: Sebenarnya, tidak Anda tidak (meskipun kadang-kadang masalah semacam itu membuat saya keluar). Lihat jawaban yang diperbarui.
RedGrittyBrick
4
find -print0 /directory/with/pdfs -iname "*.pdf" | xargs -0 mv -t /papers

(mirip dengan jawaban lain tetapi saya lebih suka pipa / xargs / mv ... lebih intuitif untuk saya)

FYI, saya berhasil membuat skrip satu-baris di atas dengan sukses pada banyak direktori dan beberapa file pdf.

Trevor Boyd Smith
sumber
1
xargs memiliki masalah "spasi dalam nama file" yang -exec tidak. Anda dapat memediasi ini agak dengan menambahkan args -print0ke temuan Anda, dan -0ke xargs.
Rich Homolka
@RichHomolka melihat jawaban yang berubah. (Terima kasih atas tipnya. Itu sangat berguna!)
Trevor Boyd Smith
Pernahkah Anda mencobanya? Sepertinya Anda perlu menambahkan "-print0" di akhir perintah find
tollo
0

Untuk baris perintah Windows (cmd.exe), Anda dapat menggunakan:

for /F "usebackq delims==" %j IN (`dir /s /b *.pdf`) do copy "%j" c:\target_dir
JackyBill
sumber
1
Hai dan selamat datang di SU. Terima kasih atas jawaban Anda, tetapi pertanyaannya secara khusus meminta solusi linux.
terdon
2
Masih luar biasa bahwa windows dapat melakukannya juga!
Vorac
0

Jika Anda hanya mencari satu direktori dalam, Anda bisa melakukan:

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

di mana <destination>singkatan dari beberapa direktori. mvtidak akan secara otomatis membuat direktori untuk Anda.

Kevin Dong
sumber