Как подстановить каталоги и все файлы в них

Допустим, я хотел подстановочные знаки каталогов, а затем подстановочный знак всех файлов в этих каталогах.

Как бы я это сделал?

Я знаю *, это подстановочные знаки для всех файлов, но я не знаю, как подстановочные знаки для каталогов.

Например, pdf2djvu -o /dir/[wildcard dirs]/[wildcards.djvu] /dir/[wildcard dirs]/[wildcards.pdf],

,

. На вторичной ноте можно повлиять на такой подстановочный знак, если в расположении есть пробел, в котором, как правило, вводится «» для пробелов, лучше использовать \ - это время?

Я попробовал то, что выложил выше, используя стандарт * для файлов шаблонов и файлов шаблонов, таких как /dir[entire dir had no spaces]/*/*.djvu, но получил следующую ошибку

I/O error (basic_ios::clear)

0
задан 1 April 2013 в 23:09

2 ответа

Одно возможное обходное решение должно использовать somethig как:

find . -iname *.pdf | xargs -I% pdf2djvu -o % %.djvu

Это нашло бы все файлы PDF, запускающиеся в текущем каталоге (рекурсивными) и выполнять команду pdf2djvu для создания file.pdf.djvu файлов.

1
ответ дан 1 April 2013 в 23:09

Проблема нет никакого хорошего способа сохранить два подстановочных расширения в синхронизации и выполнить итерации по ним, как Вы желаете сделать. Так как Вы только хотите сделать это на одном файле за один раз, было бы легче просто использовать, находят. Если бы Вы хотите рекурсивно сделать это, я сделал бы find . -iname '*.pdf' -exec pdf3djvu -o '{}'.djvu '{}' \;, Если у Вас есть только определенные каталоги, Вы хотите выполнить в этом, придумать подстановочный знак оболочки, который расширяется до тех каталогов, и используйте это в качестве аргумента для нахождения вместо .. Например, если у Вас есть несколько каталогов, которые заканчиваются "djvus" (как "pie_djvus" и "flag_djvus"):

find ./*djvus/ -maxdepth 1 -iname '*.pdf' -exec pdf3djvu -o '{}'.djvu '{}' \;

Используя / после того, как шарик гарантирует, что шарик будет только соответствовать каталогам и определению, что maxdepth 1 гарантирует, что находка не пойдет больше чем один уровень глубоко в указанных каталогах (который является верхним уровнем)

В обоих случаях, Вы собираетесь закончить с вещами как "file.pdf.djvu", который может или не может быть раздражающим Вам. Таким образом, будет второй шаг последующей обработки, необходимый, если Вы использовали, находят. Вот один способ сделать это, если Вы будете использовать недавний удар в качестве своей оболочки (то некоторые оболочки разделят имена файлов на пробелах, которые повредят это - но текущий удар не делает).

for F in *.pdf.djvu; do mv -v "$F" "${F%.pdf.djvu}.djvu"; done
0
ответ дан 1 April 2013 в 23:09

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

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