根据 Bash 中的模式更改目录名称

Posted

技术标签:

【中文标题】根据 Bash 中的模式更改目录名称【英文标题】:Change of directories names according to pattern in Bash 【发布时间】:2021-06-08 02:10:15 【问题描述】:

我需要更改单行(最佳选项)目录名称,更精确 - 删除一些在开头 TO_BE_REMOVED_W._ 具有可变部分的前缀。_

我可以找到要修改的目录:

find ./ -type d -iname 'TO_BE_REMOVED_W*' -exec mv  _____ \;

我应该如何形成执行部分来重命名目录以从全名中删除模式?

【问题讨论】:

如果你没有rename(正如tdy建议的那样),但有zsh可用,你也可以使用内部命令zmv 【参考方案1】:

大多数发行版都带有rename,它接受替换模式,所以我通常使用-execdirrename

例如删除PREFIX_

$ find . -execdir rename 's/^PREFIX_//' '' +

请注意,对于 Arch Linux,这称为 perl-rename (Arch's default rename is not the standard rename found on most distros)。

【讨论】:

【参考方案2】:

你可以像这样使用-exec bash -c '...'

$ find -name 'foo*'
./foo-01
./foo-05
./foo-02
./foo-03
./foo-04
$ find -name 'foo*' -exec bash -c 'file=$0; echo Now you can do anything with $file ...'  \;
Now you can do anything with ./foo-01 ...
Now you can do anything with ./foo-05 ...
Now you can do anything with ./foo-02 ...
Now you can do anything with ./foo-03 ...
Now you can do anything with ./foo-04 ...
$

【讨论】:

以上是关于根据 Bash 中的模式更改目录名称的主要内容,如果未能解决你的问题,请参考以下文章

如何使用适用于 Windows 的 Git 更改 Git Bash 中的目录?

Bash:根据另一个文件中的行更改文件头[重复]

临时更改 bash 中的当前工作目录以运行命令 [重复]

Bash - 在文件之前列出所有子目录中的目录名称的程序

如何去每个目录执行一个命令?

Bash 递归替换名称上的许多空格