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

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

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

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

Например, 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) [!d6 ]

1
задан 2 April 2013 в 00:09

1 ответ

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

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

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

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

for F in *.pdf.djvu; do mv -v "$F" "${F%.pdf.djvu}.djvu"; done
0
ответ дан 24 May 2018 в 23:57

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

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