Как я могу рекурсивно скопировать все файлы PDF в каталог (и его подкаталоги) в один выходной каталог?

У меня есть каталог, содержащий большое количество PDF-файлов, некоторые из которых находятся в подкаталогах (которые могут расширять несколько слоев в глубину). Я хотел бы переместить все файлы, соответствующие *.pdf в одну выходную папку с именем papers.

Как я могу это сделать?

19 голосов | спросил blz 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 20 Sep 2012 16:53:53 +0400 2012, 16:53:53

5 ответов


18

Если вы используете bash в последней версии, вы можете получить прибыль от globstar:

shopt -s globstar
mv **/*.pdf papers/
ответил choroba 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 20 Sep 2012 17:09:00 +0400 2012, 17:09:00
29
  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
ответил RedGrittyBrick 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 20 Sep 2012 17:08:02 +0400 2012, 17:08:02
4
find -print0 /directory/with/pdfs -iname "*.pdf" | xargs -0 mv -t /papers

(похоже на другой ответ, но я предпочитаю pipe /xargs /mv ... более интуитивно понятный для меня)

FYI, я успешно выполнил вышеупомянутый однострочный скрипт в нескольких каталогах и нескольких файлах PDF.

ответил Trevor Boyd Smith 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 20 Sep 2012 20:12:39 +0400 2012, 20:12:39
0

Для командной строки Windows (cmd.exe) вы можете использовать:

for /F "usebackq delims==" %j IN (`dir /s /b *.pdf`) do copy "%j" c:\target_dir
ответил JackyBill 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 20 Sep 2012 23:00:32 +0400 2012, 23:00:32
0

Если вы ищете только один раздел в глубину, вы можете сделать:

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

где <destination> обозначает некоторый каталог. mv автоматически не создаст для вас каталог.

ответил Kevin Dong 12 FebruaryEurope/MoscowbFri, 12 Feb 2016 01:06:10 +0300000000amFri, 12 Feb 2016 01:06:10 +030016 2016, 01:06:10

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132