19

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

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

5 ответов5

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
18

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

shopt -s globstar
mv **/*.pdf papers/
4
find -print0 /directory/with/pdfs -iname "*.pdf" | xargs -0 mv -t /papers

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

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

0

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

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

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

0

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

for /F "usebackq delims==" %j IN (`dir /s /b *.pdf`) do copy "%j" c:\target_dir

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .