Linux Bash文件名前缀替换
我读过很多书,但我似乎无法理解这一点。我正在把我用flac制作的翻录文件转换成mp3播放器的mp3。不过,这组数据来自两张CD,因此它们的数字前缀是不可取的 一些文件名示例:Linux Bash文件名前缀替换,linux,bash,shell,operators,filenames,Linux,Bash,Shell,Operators,Filenames,我读过很多书,但我似乎无法理解这一点。我正在把我用flac制作的翻录文件转换成mp3播放器的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 "$fil
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
收件人:富1 但这将是理想的
发信人:25 Foo 1
收件人:1 Foo 1
我已经阅读了Bash参考手册的Shell参数扩展部分,但是没有示例,我的日子很难过。我会继续修补,但我想发布帖子,看看是否有人有任何见解。可能有更好的版本,但这应该可以:
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
测试如下:
> 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
>
那你到底想做什么?从
NN Foo(M)*.flac
更改为(M)*Foo(M)*.flac
> 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
>