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