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

ido*_*ive 1 bash shell rename

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

CropDamageVO-041412.mpg

CropDamageVO041412.mpg

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

Tim*_*ote 8

试试这个:

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

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

${varname//regex/replacementText}语法解释这里.只需搜索子串替换.

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

for file in *-*; do
  mv $file "${file//-/}"
done
Run Code Online (Sandbox Code Playgroud)

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


jim*_*imw 7

FN=CropDamageVO-041412.mpg
mv $FN `echo $FN | sed -e 's/-//g'`
Run Code Online (Sandbox Code Playgroud)

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

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

for i in *VO-*.mpg
do
    mv $i `echo $i | sed -e 's/-//g'`
done
Run Code Online (Sandbox Code Playgroud)