Ответы:
Если вы используете 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
(похоже на другой ответ, но я предпочитаю pipe / xargs / mv ... более интуитивно для меня)
К вашему сведению, я успешно выполнил приведенный выше однострочный скрипт для нескольких каталогов и нескольких файлов 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
?