0

我进行了彻底的研究,以找到/创建一个适用于我想要实现的脚本。

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

YachtRescueVO-041512.mpg

游艇救援VO041512.mpg

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

6CO1-041512.mpg

6C01.mpg

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

4

3 回答 3

1

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

  • sed
  • 改名
  • awk

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

于 2012-04-16T00:07:35.180 回答
1

请参阅Bash 参数扩展

假设文件名在var

new_var = ${var%-*}${var#*-}

这对于您的第一个示例来说很好。第二个例子:

new_var = ${var%-*}.${var#*.}

我无法从您的问题中识别出您想要做什么替换。

于 2012-04-16T00:13:13.943 回答
1

我已经在你在这里提出的问题中发布了这个,但如果你认为这是一个单独的问题,这将重命名目录及其子目录中的每个文件:

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

这个站点有一些关于 bash 中的字符串操作的信息,这些信息可以帮助你开始使用你需要的正则表达式。

注意:我不记得/找不到任何东西来指定要匹配的确切字符数,例如[0-9]{6}egrep 中的 la。如果有人找到它,请告诉我。

于 2012-04-16T00:52:40.897 回答