Відповіді:
Якщо ви використовуєте bash
в останній версії, ви можете отримати прибуток від globstar
опції:
shopt -s globstar
mv **/*.pdf papers/
find /bunchopdfs -name "*.pdf" -exec mv {} /papers \;
Ось тест, який я зробив
$ ls -R
.:
a aaa bbb.pdf pdfs
./a:
foo.pdf
./pdfs:
Зверніть увагу на файл "aaa bbb.pdf".
$ find . -name "*pdf" -exec mv {} pdfs \;
$ ls -R
.:
a pdfs
./a:
./pdfs:
aaa bbb.pdf foo.pdf
"{}"
щоб мати справу з іменами файлів, що містять пробіли?
find -print0 /directory/with/pdfs -iname "*.pdf" | xargs -0 mv -t /papers
(подібно до іншої відповіді, але я віддаю перевагу труба / xargs / mv ... інтуїтивніше для мене)
FYI, я описав вищезазначений однорядковий сценарій успішно в декількох каталогах і кількох файлах PDF.
-print0
до своєї знахідки та -0
xargs.
Для командного рядка Windows (cmd.exe) ви можете використовувати:
for /F "usebackq delims==" %j IN (`dir /s /b *.pdf`) do copy "%j" c:\target_dir
Якщо ви шукаєте лише один каталог глибоко, ви можете зробити:
mkdir <destination>
mv */*.pdf <destination>
де <destination>
стоїть деякий каталог. mv
автоматично не створить каталог для вас.
a/x.pdf
іb/x.pdf
?