使用Bash从文件名中删除连字符

时间:2012-04-15 00:56:33

标签: bash shell rename

我正在尝试创建一个小的Bash脚本来从文件名中删除连字符。例如,我想重命名:

CropDamageVO-041412.mpg

CropDamageVO041412.mpg

我是Bash的新手,所以要温柔:]谢谢你的帮助

4 个答案:

答案 0 :(得分:8)

试试这个:

for file in $(find dirWithDashedFiles -type f -iname '*-*'); do
  mv $file ${file//-/}
done

假设您的目录名称中没有破折号。这会打破这个。

解释了${varname//regex/replacementText}语法here。只需搜索子串替换。

此外,如果您的目录或文件名中包含空格,则会中断。如果文件名中有空格,则应使用:

for file in *-*; do
  mv $file "${file//-/}"
done

这样做的缺点是必须在包含要更改的文件的每个目录中运行,但是,就像我说的那样,它更加强大。

答案 1 :(得分:4)

FN=CropDamageVO-041412.mpg
mv $FN `echo $FN | sed -e 's/-//g'`

反引号(``)告诉bash在其中运行命令并在表达式中使用该命令的输出。 sed部分应用正则表达式从文件名中删除连字符。

或者对当前目录中与特定模式匹配的所有文件执行此操作:

for i in *VO-*.mpg
do
    mv $i `echo $i | sed -e 's/-//g'`
done

答案 2 :(得分:0)

f=CropDamageVO-041412.mpg
echo ${f/-/}

或者,当然,

mv $f ${f/-/}

答案 3 :(得分:0)

从任何字符串中删除连字符的一般解决方案:

$ echo "remove-all-hyphens" | tr -d '-'
removeallhyphens
$