从Bash中的文件名中删除连字符
我已经彻底研究过,以查找/创建适用于我试图实现的脚本。从Bash中的文件名中删除连字符
我试图用Bash改变多个文件名。在这种类型的,我想只是删除连字符:
YachtRescueVO041512.mpg
到
YachtRescueVO041512.mpg
但随后,有更多的文件在同一目录。我想删除这两个连字符和日期:
6CO1-041512.mpg
到
6C01.mpg
我敢肯定,我需要一个正则表达式来排序通过它,因为还有其他文件约会惯例,如6B1A,3TSE1,CO1,11TSE3,TS1等。我意识到这将是一个冗长的脚本。如果你有空闲时间,我会很感激这个帮助。
好了,我没有时间做这样的脚本,但我想你应该看看下面的命令:
- sed的
- 重命名
- 削减
- AWK
是的,正则表达式是一种非常有效的方法,但要花很长时间才能真正有效地使用语法......
假设文件名是在var
:
new_var = ${var%-*}${var#*-}
这将罚款你的第一个例子。对于第二个例子:
new_var = ${var%-*}.${var#*.}
我认不出你想从你的问题做替代品。
我已经张贴了这个在你问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}
。如果有人发现它让我知道。
我感谢您的耐心和帮助。我终于可以将它们拼凑成适合我情况的东西。谢谢! – idoperceive 2012-04-16 03:34:24
太棒了。你能为你的开放性问题选择一个被接受的答案吗? – 2012-04-16 11:27:26
您如何确定何时删除连字符以及何时删除连字符和日期? – 2012-04-16 00:20:38
可能的重复http://stackoverflow.com/questions/10158704/remove-hyphens-from-filename-with-bash/10158742#10158742 – 2012-04-16 00:47:14
@idoperceive你是谁发布了我刚刚链接的问题。我在这个问题上发布的答案完全解决了这个问题。它会在目录及其子目录中找到带连字符的所有文件,并将其全部重命名为不带连字符。 – 2012-04-16 00:50:36