2012-04-16 43 views
0

我已经彻底研究过,以查找/创建适用于我试图实现的脚本。从Bash中的文件名中删除连字符

我试图用Bash改变多个文件名。在这种类型的,我想只是删除连字符:

YachtRescueVO041512.mpg

YachtRescueVO041512.mpg

但随后,有更多的文件在同一目录。我想删除这两个连字符和日期:

6CO1-041512.mpg

6C01.mpg

我敢肯定,我需要一个正则表达式来排序通过它,因为还有其他文件约会惯例,如6B1A,3TSE1,CO1,11TSE3,TS1等。我意识到这将是一个冗长的脚本。如果你有空闲时间,我会很感激这个帮助。

+0

您如何确定何时删除连字符以及何时删除连字符和日期? – 2012-04-16 00:20:38

+0

可能的重复http://stackoverflow.com/questions/10158704/remove-hyphens-from-filename-with-bash/10158742#10158742 – 2012-04-16 00:47:14

+0

@idoperceive你是谁发布了我刚刚链接的问题。我在这个问题上发布的答案完全解决了这个问题。它会在目录及其子目录中找到带连字符的所有文件,并将其全部重命名为不带连字符。 – 2012-04-16 00:50:36

回答

1

好了,我没有时间做这样的脚本,但我想你应该看看下面的命令:

  • sed的
  • 重命名
  • 削减
  • AWK

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

1

Bash parameter expansion

假设文件名是在var

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

这将罚款你的第一个例子。对于第二个例子:

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

我认不出你想从你的问题做替代品。

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在庆典上的字符串操作一些信息,应该让你开始在你需要的正则表达式上。

注意:我不记得/找到任何东西来指定匹配的字符的确切数量,在egrep中有一个la [0-9]{6}。如果有人发现它让我知道。

+0

我感谢您的耐心和帮助。我终于可以将它们拼凑成适合我情况的东西。谢谢! – idoperceive 2012-04-16 03:34:24

+0

太棒了。你能为你的开放性问题选择一个被接受的答案吗? – 2012-04-16 11:27:26