Удалить ведущий "./" в пакетном скрипте
for f in ./*.mp3; do sox "$f" "${f%%.mp3}processed.mp3" silence 1 0.02 1% -1 0.02 1%; done
Это скрипт, который я использую для обработки аудио файлов. Проблема в том, что он продолжает работать в цикле, также обрабатывая новые аудиофайлы. Я хотел бы исправить это, поместив вывод в подпапку, поэтому я попробовал это:
for f in ./*.mp3; do sox "$f" "/subfolder${f%%.mp3}processed.mp3" silence 1 0.02 1% -1 0.02 1%; done
Это вывод:
/subfolder./01processed.mp3
Это дает мне ошибку с Sox, мне нужно удалить./ перед выводом имени файла, как я могу это сделать? Вот что я хотел бы получить:
/subfolder/01processed.mp3
2 ответа
for f in *.mp3; do sox "$f" "/subfolder/${f%%.mp3}processed.mp3" silence 1 0.02 1% -1 0.02 1%; done
for f in ./*.mp3; do
out=${f#./}
out=${out%%.mp3}processed.mp3
sox "$f" "/subfolder/$out" silence 1 0.02 1% -1 0.02 1%
done
Вы можете лишить обоих ведущих ./
и тянущийся mp3
, но расширения параметров должны выполняться по одному (они не могут быть вложенными). Вы могли раздеть только ведущих .
и держать /
когда вы строите выходной путь, но яснее его убрать и явно вернуть обратно. (/subfolder$out
не дает понять, что файл помещается в папку с именем subfolder
вместо создания файла / папки с именем subfolder$out
.)
Между прочим, for f in ./*.mp3
это самая правильная версия, так как она будет работать с файлами, которые начинаются с -
; иначе, sox
может принять имя входного файла за опцию.