我已经读完了,但我似乎无法绕过这个。我正在将我在flac中制作的翻录文件转换为mp3播放器。这个集合来自两张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参数扩展部分,但没有示例,我很难过。我会继续修补,但我想发帖看看是否有人有任何见解。
答案 0 :(得分: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
答案 1 :(得分: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
>