我正在尝试创建一个小的 Bash 脚本来从文件名中删除连字符。例如,我想重命名:
CropDamageVO-041412.mpg
至
CropDamageVO041412.mpg
我是 Bash 的新手,所以要温柔 :] 谢谢你的帮助
尝试这个:
for file in $(find dirWithDashedFiles -type f -iname '*-*'); do
mv $file ${file//-/}
done
这是假设您的目录名称中没有破折号。那会打破这个。
这里解释了${varname//regex/replacementText}
语法。只需搜索子字符串替换。
此外,如果您的目录或文件名中有空格,这会中断。如果你的文件名中有空格,你应该使用这个:
for file in *-*; do
mv $file "${file//-/}"
done
这样做的缺点是必须在每个包含您要更改的文件的目录中运行,但是,就像我说的,它更健壮一些。
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
f=CropDamageVO-041412.mpg
echo "${f//-}"
或者,当然,
mv "$f" "${f//-}"
从任何字符串中删除连字符的通用解决方案:
$ echo "remove-all-hyphens" | tr -d '-'
removeallhyphens
$