Почему процесс отправки электронной почты не симметричен процессу получения?

Это ?— это просто символ-заполнитель, выводимый lsдля представления символа новой строки, который вы внедрили в имя файла.

echo foo3bar.mp4 | grep -Eo '[0-9]+'

будет выводить:

3
4

Поскольку в этом имени файла есть две последовательности из 1 или более десятичных цифр.

Вместо этого вы могли бы сделать:

for file in *[0-9]*.mp4; do
  n=${file%.*} # remove the extension
  n=${n%"${n##*[0-9]}"} # remove anything after the last digit
  n=${n##*[!0-9]} # remove everything up to the last non-digit.

  ffmpeg...
done

Это позволит извлечь правильную -наиболее последовательность десятичных цифр в имени файла, лишенном его расширения, и избежать выполнения нескольких команд для каждого файла.

Обратите внимание, что в этом коде используется только стандартный синтаксис sh POSIX, поэтому для его запуска bashне требуется. С bashили другимиksh93-подобными оболочками, если вы знаете, что корневое имя файла содержит только одну последовательность цифр, вы также можете использовать:

n=${file%.*} # remove the extension
n=${n//[^0-9]} # remove all non-digit characters

Сbash-особенностями:

[[ $file =~ ([0-9]+).*\. ]] && n=${BASH_REMATCH[1]}

Будет извлечена левая -самая последовательность цифр в корневом имени.

Сzsh:

n=${(SM)${file:r}##<->}
-3
12.09.2020, 00:38
0 ответов

Теги

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