0

我已经阅读过,但我似乎无法理解这一点。我正在将我用 flac 制作的翻录文件转换为 mp3 以供 mp3 播放器使用。不过,这套 CD 来自两张 CD,因此它们的数字前缀是不可取的。

一些文件名示例:

01 Foo 9.flac
02 Foo 10.flac
03 Foo 11.flac
04 Foo 12.flac
05 Foo 13.flac
25 Foo 1.flac
26 Foo 2.flac
...

这是我到目前为止所拥有的

$for file in *Foo*.flac; do flac -cd "$file" | lame -q 0 -V0 - "/media/mp3player/speech/${file%.flac}.mp3"; done

如何删除数字和空格前缀,理想情况下将其替换为与结束数字对应的内容?

所以朝着正确的方向迈出一步是
从:25 Foo 1
到:Foo 1

但这将是理想的
从:25 Foo 1
到:1 Foo 1

我已经阅读了 Bash 参考手册的 Shell Parameter Expansion 部分,但没有示例,我很难过。我会继续修补,但我想发帖看看是否有人有任何见解。

4

2 回答 2

1

可能有更好的版本,但这应该可以工作:

for file in *Foo*.flac
do
  n=${file#*Foo} # erase from filename Foo and preceding characters
  n=${n%.flac}   # get file index
  fileout=${n}${file#[0-9]?}.mp3  #this works as long as you have two digits numbers only
  flac -cd "$file" | lame -q 0 -V0 - "/media/mp3player/speech/${fileout}.mp3"
done
于 2013-02-05T13:57:12.770 回答
0
awk '{old=$0;a=$NF;gsub(".flac","",a);$1=a;new=$0;system("mv \""old"\" \""new"\"");}'

测试如下:

> ls -1 01*
01 Foo 25.flac
01 Foo 26.flac
01 Foo 9.flac

> ls -1 01*| awk '{old=$0;a=$NF;gsub(".flac","",a);$1=a;new=$0;system("mv \""old"\" \""new"\"");}'

> ls -1 *.flac
25 Foo 25.flac
26 Foo 26.flac
9 Foo 9.flac
> 
于 2013-02-05T14:18:09.187 回答