重命名子文件夹中的所有文件 - 替换filename中的字符串

时间:2015-07-17 13:52:04

标签: bash rename directory subdirectory

我想重命名文件夹及其子文件夹中的所有文件。

我需要将字符串HEX20更改为字符串HEX8。 有些文件名有其他数字,所以我不能简单地将20更改为8

完整路径的一个例子是:

\\FRDS01006\z188018\FEM\Linear\HEX20\3HEX20\3HEX20.bof

我想对文件夹名称进行相同的替换。

2 个答案:

答案 0 :(得分:3)

这个怎么样:

find . -name "*HEX20*" -exec rename HEX20 HEX8 '{}' +

这将以递归方式搜索当前目录和所有子目录以匹配HEX20。 (省略了-type f标志,因为除了文件之外,提问者想要更改目录的名称。)然后它将构建一个长rename命令并最终调用它。这种类型的构造可能比使用sed构建一系列命令然后逐个执行它们更简单。

答案 1 :(得分:0)

试试这个:

find . -type f -name "*HEX20*" |  sed 's/\(.*\)HEX20\(.*\)/mv \0 \1HEX8\2/' | sh

通过这种方式,您可以找到名称中包含HEX20的常规文件:

find . -type f -name "*HEX20*"

然后更改HEX20 whith HEX8的最后一次出现并编译mv命令:

find . -type f -name "*HEX20*" |  sed 's/\(.*\)HEX20\(.*\)/mv \0 \1HEX8\2/'

最后用sh执行已编译的命令:

find . -type f -name "*HEX20*" |  sed 's/\(.*\)HEX20\(.*\)/mv \0 \1HEX8\2/' | sh