Удалить все вхождения слова, кроме третьего и предпоследнего, с помощью sed

Другим вариантом может быть использование подстановки bash для поиска wav-файлов, а затем функции расширения параметров оболочки для изменения структуры каталогов и имен файлов:

shopt -s globstar nocaseglob
for input in Music/**/*.wav
do
  indir=$(dirname "$input")
  outdir=${indir/#Music/Music_Flac}
  [ ! -d "$outdir" ] && mkdir -p "$outdir"
  infile=$(basename "$input")
  outfile=${infile%.???}.flac
  echo ffmpeg -i "$input" "${outdir}/${outfile}"
done

Если файлы всегда только *.wavи *.WAV, вы можете пропустить shopt nocaseglobи вместо этого использовать for input in Music/**/*.wav Music/**/*.WAV.

Я не знаю, какие параметры вы хотите использовать для ffmpeg, но я предоставил echoпример путей к входным и выходным файлам, из которых вы можете построить.

В этом примере дерева каталогов:

$ tree Music
Music
├── a.wav
├── b.WAV
├── c d.wav
└── subdir1
    ├── a.wav
    ├── b.WAV
    ├── c d.wav
    └── subdir2
        ├── a.wav
        ├── b.WAV
        └── c d.wav

пример вывода команды:

ffmpeg -i Music/a.wav Music_Flac/a.flac
ffmpeg -i Music/b.WAV Music_Flac/b.flac
ffmpeg -i Music/c d.wav Music_Flac/c d.flac
ffmpeg -i Music/subdir1/a.wav Music_Flac/subdir1/a.flac
ffmpeg -i Music/subdir1/b.WAV Music_Flac/subdir1/b.flac
ffmpeg -i Music/subdir1/c d.wav Music_Flac/subdir1/c d.flac
ffmpeg -i Music/subdir1/subdir2/a.wav Music_Flac/subdir1/subdir2/a.flac
ffmpeg -i Music/subdir1/subdir2/b.WAV Music_Flac/subdir1/subdir2/b.flac
ffmpeg -i Music/subdir1/subdir2/c d.wav Music_Flac/subdir1/subdir2/c d.flac

... вместе с необходимыми командами mkdirпо пути.

-1
16.09.2020, 16:07
1 ответ
Таким образом,

можно обрабатывать с помощью awk, если это возможно. Мы устанавливаем разделитель полей на слово, которое вы хотите заменить. Предполагая, что в нем нет символов регулярного выражения. Затем установите разделитель записей на пустое регулярное выражение и выполните цикл по полям. Подставьте разделитель полей обратно в 3-й и третий последний.

$ awk -F 'liam' '
{
 for (i=1;i<NF-1; i++) {
   if (i==3||i==NF-2) {
     sub(/$/, FS, $i)
   }
 }
}
1' RS='^$' OFS= file
1
18.03.2021, 23:04

Теги

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