У меня есть каталог, содержащий большое количество файлов PDF, некоторые из которых находятся в подкаталогах (которые могут иметь несколько уровней в глубину). Я хотел бы переместить все соответствующие файлы *.pdf
в одну выходную папку с именем papers
.
Как я могу это сделать?
решение1
Если вы используете bash
последнюю версию, вы можете воспользоваться опцией globstar
:
shopt -s globstar
mv **/*.pdf papers/
решение2
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
решение3
find -print0 /directory/with/pdfs -iname "*.pdf" | xargs -0 mv -t /papers
(похоже на другой ответ, но я предпочитаю pipe/xargs/mv ... для меня более интуитивно понятно)
К вашему сведению, я успешно применил приведенный выше однострочный скрипт к нескольким каталогам и нескольким PDF-файлам.
решение4
Если вы ищете только в одном каталоге, вы можете сделать следующее:
mkdir <destination>
mv */*.pdf <destination>
где <destination>
обозначает некоторый каталог. mv
не создаст для вас каталог автоматически.