如何使用BASH从文件名中删除特定字符

res*_*fix 28 bash

我有很多文件在他们的名字中有一个共享模式,我想删除.例如,我有文件"a_file000.tga"和"another_file000.tga".我想对那些会从名称中删除模式"000"的文件执行操作,从而产生新名称"a_file.tga"和"another_file.tga".

Pau*_*ce. 59

Bash可以做sed类似的替换:

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

  • 有关此功能的文档,请参见_Bash参考手册_中的3.5.3 [Shell参数扩展](https://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion)部分, `$ {parameter / pattern / string}`。有关参数替换的更多详细示例,请参见_Advanced Bash-Scripting Guide_中的10.2 [Parameter Substitution](http://www.tldp.org/LDP/abs/html/parameter-substitution.html)。 (2认同)

mou*_*iel 51

试试这个(这也适用于普通的旧Bourne sh):

for i in *000.tga
do
    mv "$i" "`echo $i | sed 's/000//'`"
done
Run Code Online (Sandbox Code Playgroud)

两个参数都用引号括起来以支持文件名中的空格.

  • +1 对于大多数便携式解决方案(并且因为我的支持率太低,无法继续支持 _all_ 好的答案)。 (2认同)

Cas*_*bel 9

一个非bash解决方案,因为我知道两张快速的海报已经涵盖了:

有一个很好的短perl程序rename,默认安装在某些系统上(其他系统的重命名程序不太有用).它允许您使用perl正则表达式进行重命名,例如:

rename 's/000//' *000*.tga
Run Code Online (Sandbox Code Playgroud)