Я хочу скопировать все файлы pdf в другой каталог [дубликат]

На этот вопрос уже есть ответ здесь:

Пользователи Linux! У меня проблема: У меня есть все файлы PDF в каталоге Загрузки , но я хочу, чтобы он скопировал все файлы в подпапке \ Download \ BOOKS \ . Как мне скопировать все файлы с для цикла ?

для файлов в ...

1
задан 11 July 2018 в 19:38

6 ответов

Я не думаю, что Вы требуете for цикл только для копирования файлов. Можно скопировать использование файлов:

cp /home/username/Downloads/*.pdf /home/username/Downloads/BOOKS

Но если Вы все еще хотите использовать for цикл, можно также записать ниже кода:

cd /home/username/Downloads
for F in *.pdf
do
   cp "$F" /home/username/Downloads/BOOKS
done
4
ответ дан 3 December 2019 в 06:18

не с для цикла, но это должно работать для перемещения файлов.

mv /home/username/Downloads/*.pdf /home/username/Downloads/BOOKS

Используйте это для создания копии файлов:

cp /home/username/Downloads/*.pdf /home/username/Downloads/BOOKS
9
ответ дан 3 December 2019 в 06:18

Существующие ответы все достойны, но имеют переменные незначительные проблемы, которые могут или не могут быть проблематичными. Давайте попытаемся обработать их.

  1. *.pdf корректный для всех файлов? Я нахожу, что PDFs, загруженные с Интернета часто, *.PDF вместо этого. (Я подозреваю, что определенные нечувствительные к регистру файловые системы вызывают это.)
  2. Все PDFs в КНИЖНОМ подкаталоге непосредственно или являются там подкаталогами? BOOKS/Romance, BOOKS/Horror например.
  3. PDFs имеют расширения файла вообще? Иногда они не делают.
  4. Какой-либо из файлов символически связан? Вряд ли, но не трудно обработать.
  5. Уже указанный, но повторение переносов: какие-либо из имен файлов содержат пробелы или другие нечетные символы? Пробелы довольно характерны для человекочитаемого.

Стратегия состоит в том, чтобы использовать find определять местоположение потенциального PDFs, file отфильтровать только фактический PDFs и затем действовать на те имена файлов.

find -L books -maxdepth 1 -print0 | xargs -0 -n1 -I{} sh -c '[ "$(file -b --mime-type "{}")" = "application/pdf" ] && cp "{}" Download/'

find -L Download/BOOKS -maxdepth 1 -print0 определит местоположение всех записей файловой системы в дереве подкаталога, запускающемся в Download/BOOKS, переходить по символьным ссылкам в случае необходимости, на максимальную глубину. Увеличьте число глубины, чтобы обработать подкаталоги или удалить -maxdepth 1 обработать целое дерево.

xargs -0 -n1 -I{} проводит несколько строк входа и неоднократно выполняет команду с 1 входной строкой.

sh -c '[ "$(file -b --mime-type "{}")" = "application/pdf" ] && cp "{}" Download/' делает новую оболочку для запущения теста на записи файловой системы, и если это - PDF (как определено расширением файла, и содержание файла) делают копию из него к Download/ каталог.

Используя find заботится о 1., 2. и 4. Используя file заботится о 3. Используя -print0 и -0 аргументы и тщательное заключение в кавычки заботятся о 5.

Если Вам действительно был нужен цикл, потому что Вы хотите выполнить другие команды на каждом PDF, замене cp "{}" Download/ с чем approriate. {} шаблон, который xargs заменит каждым именем файла, когда это работает.

7
ответ дан 3 December 2019 в 06:18

Я не знаю о для циклов (если Вы не пишете программу C для достижения этого), но эта строка должна сделать это:

 cp -v ~/Downloads/*.pdf ~/Downloads/BOOKS/

CP является копией, и *, чтобы подстановочный знак выбрал что-либо заканчивающееся в .pdf в том каталоге.

5
ответ дан 3 December 2019 в 06:18

Простое для цикла должно смочь сделать то, в чем Вы нуждаетесь, т.е. копируете все файлы PDF при Загрузках (включая подкаталоги) в к Загрузкам/КНИГАМ

cd Downloads
IFS=$(echo -en "\n\b") && for n in `find . -path ./BOOKS -prune -o -name "*.pdf" -print`; do cp -fv "$n" ./BOOKS; done

Обратите внимание, что одинарная кавычка для оператора находки является обратной одинарной кавычкой, не нормальной.

Отредактированный: Внутренний разделитель полей необходим для пробелов в именах файлов.

3
ответ дан 3 December 2019 в 06:18

Простое для цикла будет работать, но намного более сложно, чем это должно быть.

for FILE in ~/Downloads/BOOKS/*.pdf; do
  cp "$FILE" /new/directory/
done

Это скопирует все файлы в каталоге BOOKS к/new/directory

1
ответ дан 3 December 2019 в 06:18

Другие вопросы по тегам:

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