我正在尝试创建一个小的Bash脚本来从文件名中删除连字符。例如,我想重命名:
CropDamageVO-041412.mpg
到
CropDamageVO041412.mpg
我是Bash的新手,所以要温柔:]谢谢你的帮助
答案 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
$