我已经彻底研究过找到/创建一个适合我想要实现的脚本。
我正在尝试使用Bash更改多个文件名。在这种类型中,我试图删除连字符:
YachtRescueVO-041512.mpg
到
YachtRescueVO041512.mpg
但是,同一目录中有更多文件。我正在尝试删除连字符和日期:
6CO1-041512.mpg
到
6C01.mpg
我很确定我需要一个正则表达式来对其进行排序,因为还有其他的文件约定约定,如6B1A,3TSE1,CO1,11TSE3,TS1等。我意识到这将是一个冗长的脚本。如果你有空闲时间,我会非常感谢你的帮助。
答案 0 :(得分:1)
好吧,我没有时间做这样的剧本,但我认为你应该看看以下命令:
是的,正则表达式是一种非常有效的方法,但是使用语法需要相当长的时间才能真正有效...
答案 1 :(得分:1)
假设文件名在var
:
new_var = ${var%-*}${var#*-}
这对你的第一个例子很好。第二个例子:
new_var = ${var%-*}.${var#*.}
我无法识别你想从问题中做什么替换。
答案 2 :(得分:1)
我已在您问here的问题中发布此内容,但如果您认为这是一个单独的问题,则会重命名目录及其子目录中的每个文件:
for file in $(find dirWithDashedFiles -type f -iname '*-*'); do
mv $file ${file//-/}
done
我在另一篇文章中提到的所有警告都适用。
您可以修改字符串操作以满足您的需求。例如,删除所有连字符后,可以运行此命令以删除名称中包含6C01
的文件的日期:
for file in $(find dirWith6C01Files -type f -iname '6C01*'); do
mv $file ${file%[0-9][0-9][0-9][0-9][0-9][0-9].mpg}.mpg
done
This site有一些关于bash中字符串操作的信息,可以让你开始使用你需要的正则表达式。
注意:我无法记住/找到任何指定要匹配的确切字符数的内容,例如egrep中的la [0-9]{6}
。如果有人发现它让我知道。