根据 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
,它接受替换模式,所以我通常使用-execdir
和rename
。
例如删除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 中的模式更改目录名称的主要内容,如果未能解决你的问题,请参考以下文章