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

У меня есть эта папка с PDFs в него, и я должен обработать 1000 за один раз. Таким образом, я должен переместить их в другую папку, обработать их и удалить их. Для этого я пытался использовать

$ find . -maxdepth 1 -type f |head -1000|xargs cp -t $destdir

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

Кто-либо может помочь мне найти решение?

И я попробовал -0 опция, это не работало

1
задан 22 August 2014 в 12:08

2 ответа

Это должно решить установленную проблему:

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 '{}' \+
0
ответ дан 11 November 2019 в 12:37

Используйте -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 непосредственно.

1
ответ дан 11 November 2019 в 12:37

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

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