从Bash中的文件名中删除连字符

时间:2012-04-16 00:02:31

标签: bash shell rename

我已经彻底研究过找到/创建一个适合我想要实现的脚本。

我正在尝试使用Bash更改多个文件名。在这种类型中,我试图删除连字符:

YachtRescueVO-041512.mpg

YachtRescueVO041512.mpg

但是,同一目录中有更多文件。我正在尝试删除连字符和日期:

6CO1-041512.mpg

6C01.mpg

我很确定我需要一个正则表达式来对其进行排序,因为还有其他的文件约定约定,如6B1A,3TSE1,CO1,11TSE3,TS1等。我意识到这将是一个冗长的脚本。如果你有空闲时间,我会非常感谢你的帮助。

3 个答案:

答案 0 :(得分:1)

好吧,我没有时间做这样的剧本,但我认为你应该看看以下命令:

  • SED
  • 重命名
  • AWK

是的,正则表达式是一种非常有效的方法,但是使用语法需要相当长的时间才能真正有效...

答案 1 :(得分:1)

请参阅Bash parameter expansion

假设文件名在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}。如果有人发现它让我知道。