У меня есть эта папка с PDFs в него, и я должен обработать 1000 за один раз. Таким образом, я должен переместить их в другую папку, обработать их и удалить их. Для этого я пытался использовать
$ find . -maxdepth 1 -type f |head -1000|xargs cp -t $destdir
Это дает ошибку на одинарных и двойных кавычках в имени файла. Существуют тысячи файлов, и я понятия не имею, сколько из них имеет эти кавычки в них.
Кто-либо может помочь мне найти решение?
И я попробовал -0
опция, это не работало
Это должно решить установленную проблему:
shopt -s globstar
printf '%q\0' **/*.pdf | xargs -0 -L 1000 cp -t $destdir
Первая строка включает globstar опцию для удара, так, чтобы **
дает Вам рекурсивный поиск. С тех пор printf
удар, встроенный на Ubuntu, это не должно иметь никаких проблем с большими количествами файлов.
Первый аргумент, данный printf
говорит это, как отформатировать все другие аргументы. %q
говорит этому выходить из всего, что могло бы доставить неприятности с a \
- так foo bar'baz
станет foo\ bar\'baz
. \0
говорит этому вставлять нулевой символ после каждой заключенной в кавычки строки (эквивалентный использованию -print0
в находке), который может затем быть выбран независимо xargs
-0
опция. Если необходимо использовать разграниченные новой строкой имена - который, я думаю, Вы делаете, так как Вам будет нужна комбинация head
и tail
чтобы сделать пакеты файлов - затем, необходимо использовать \n
вместо \0
:
printf '%q\n' **/*.pdf | head -1000 | xargs cp -t $destdir
Со всем, что сказало, Вы могли бы быть более обеспеченным вызовом, Вы пишете сценарий непосредственно от find
- затем Вы не должны волноваться о выходе или заключении в кавычки ничего:
find . -type f -exec your_script '{}' \+
Используйте -print0
опция, затем используйте этот метод для применения head
на него:
find . -maxdepth 1 -type f -print0 | tr '\0\n' \n\0' |
head -1000 | tr '\0\n' \n\0' | xargs --null cp -t $destdir
Примечание, которое xargs
имеет -L
опция, которая определяет, сколько аргументов это должно читать сразу из входа. Таким образом, в зависимости от обработки необходимо сделать, Вы могли пропустить эти head
, записать сценарий, который берет 1000 аргументы, или даже сделайте обработку через xargs
непосредственно.