用于更改文件名的Bash脚本

时间:2014-10-14 09:37:03

标签: regex bash

我有这种格式的文件:ddmmyyyyRANDOM.mp3

我希望将它们重命名为:yyyy-mm-dd-RANDOM.mp3

RANDOM是一个随机字符串,可以包含空格。 不是作业问题。我被击中了,我尝试了各种正则表达式,但是我发现了。我需要编写bash脚本

4 个答案:

答案 0 :(得分:2)

我会通过substring

的方法分解
 filename="ddmmyyyyRANDOM.mp3"
part1=${filename:0:8} #this should get you ddmmyyy
part2=${filename:9:6} #this should get you RANDOM
filenamenew=$part1$part2".mp3"
mv $fileneme $filenamenew

如果您有超过1个文件名,则循环运行

答案 1 :(得分:0)

试试这个:

FILE="23022014hello world.mp3"
mv "$FILE" "$(echo "$FILE" | sed 's/\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{4\}\)\(.*\)/\3-\2-\1-\4/')"

分别剪切前2个数字,后2个数字,接下来的4个数字和剩余字符,并根据您的要求进行排列。

答案 2 :(得分:0)

试试这个:

for file in *; do
    new=$(echo "$file" | sed -r 's/^([0-9]{2})([0-9]{2})([0-9]{4})(.*)$/\3-\2-\1-\4/')
    mv "$file" "$new" 
done

有关正则表达式的更多信息HERE

答案 3 :(得分:0)

使用rename实用程序

touch 12021960RANDOM.mp3 "01041973 random with spaces.mp3"

$ rename -n 's/^(\d{2})(\d{2})(\d{4})/$3-$2-$1-/' *.mp3
01041973 random with spaces.mp3 renamed as 1973-04-01- random with spaces.mp3
12021960RANDOM.mp3 renamed as 1960-02-12-RANDOM.mp3

如果您对输出感到满意,请移除-n部分以实际执行重命名