Как указать имя выходного файла с помощью конвейера?

Я не совсем уверен, что вы имеете в виду под виртуальным диском, но если у вас есть способ увеличить блочное устройство с на нем физическим томом, вы можете использовать команду pvresizeдля увеличения физического тома до нового размера. блочного устройства. Как только PV вырастет, вам нужно будет использовать lvextend, чтобы выделить больше места для выбранного LV; и, наконец, используйте resize2fs(, предполагая, что ext2/3/4 )расширяет файловую систему для использования нового пространства LV.

0
19.08.2019, 12:11
1 ответ

Хитрость заключается в том, чтобы , а не создавать список файлов, который вы затем перебираете (, см., например,. Почему зацикливание вывода find является плохой практикой?).

find "$directory" -type f -name '*.epub' -exec ebook-convert {} output.txt \;

Это находит все обычные файлы, имя которых соответствует *.epubв каталоге $directoryили ниже него. Для каждого выполняется команда ebook-convertс указанием пути к найденному файлу в качестве первого аргумента и output.txtв качестве второго.

Это, очевидно, перезапишет output.txtдля каждого найденного файла, но следующее позволит обойти это, создав файл с тем же именем, что и у исходного файла, с добавлением -converted.txtв конце имени (в тот же каталог, что и исходный файл):

find "$directory" -type f -name '*.epub' -exec ebook-convert {} {}-converted.txt \;

Этот может работать не со всеми реализациями find, так как он может не заменять второй {}на путь к найденному файлу (, так как он объединен с другой строкой; но напр. GNU findсправляется с этим ). Чтобы обойти это:

find "$directory" -type f -name '*.epub' -exec sh -c '
    for pathname do
        ebook-convert "$pathname" "$pathname"-converted.txt
    done' sh {} +

С оболочкой, такой как bashили zsh, которая поддерживает шаблон подстановки **:

for pathname in "$directory"/**/*.epub; do
    ebook-convert "$pathname" "$pathname"-converted.txt
done

(для этого требуется shopt -s globstarв bashи будет обрабатывать любое совпадающее имя, а не только обычные файлы, если вы не используете *.epub(.)в zshили явный -fтест вbash)

4
28.01.2020, 02:17

Теги

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