Jawaban:
Jika Anda menggunakan bash
dalam versi terbaru, Anda bisa mendapat untung dari globstar
opsi:
shopt -s globstar
mv **/*.pdf papers/
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
"{}"
untuk berurusan dengan nama file yang mengandung spasi?
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.
-print0
ke temuan Anda, dan -0
ke xargs.
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
Jika Anda hanya mencari satu direktori dalam, Anda bisa melakukan:
mkdir <destination>
mv */*.pdf <destination>
di mana <destination>
singkatan dari beberapa direktori. mv
tidak akan secara otomatis membuat direktori untuk Anda.
a/x.pdf
danb/x.pdf
?