Як я можу рекурсивно копіювати всі файли PDF у каталозі (а це підкаталоги) в єдиний вихідний каталог?


20

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

Як я можу це зробити?


1
Як би ви хотіли розібратися у випадку, якщо є два файли a/x.pdfі b/x.pdf?
Полковник Паніка

Відповіді:



30
  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

Гарний! +1!
PenguinCoder

Чи не потрібно цитувати, "{}"щоб мати справу з іменами файлів, що містять пробіли?
тердон

@terdon: Насправді, ні, ти цього не робиш (хоча ця проблема часом мене виганяє). Дивіться оновлену відповідь.
RedGrittyBrick

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

(подібно до іншої відповіді, але я віддаю перевагу труба / xargs / mv ... інтуїтивніше для мене)

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


1
xargs має випуск "пробілів у назви файлів", які -exec не має. Ви можете дещо опосередкувати це, додавши аргументи -print0до своєї знахідки та -0xargs.
Багата Гомолка

@RichHomolka див. Змінену відповідь. (Дякую за пораду. Це дійсно корисно!)
Тревор Бойд Сміт

Ви коли-небудь пробували це? Схоже, вам потрібно додати "-print0" наприкінці команди find
tollo

0

Для командного рядка Windows (cmd.exe) ви можете використовувати:

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

1
Привіт і ласкаво просимо до SU. Дякую за вашу відповідь, але запитання спеціально вимагає рішення Linux.
тердон

2
Досі дивовижно, що і Windows можуть це зробити!
Vorac

0

Якщо ви шукаєте лише один каталог глибоко, ви можете зробити:

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.