我有一个类似以下的目录树
$ tree -F
.
├── old_value/
│ ├── old_value.py
│ ├── old_value_subdir/
│ │ └── old_value_file
│ ├── other_value.py
│ └── other_value_subdir/
│ └── old_value_file
└── old_value.py
我想在目录名和文件名中将old_value
替换为new_value
。最后,它应如下所示:
.
├── new_value/
│ ├── new_value.py
│ ├── new_value_subdir/
│ │ └── new_value_file
│ ├── other_value.py
│ └── other_value_subdir/
│ └── new_value_file
└── new_value.py
有许多类似的答案表明find -exec
,xargs
,rename
和mv
与模式的组合。 (1),(2),(3)。我找不到在多个目录级别匹配相同字符串的路径的合理提及。例如
./old_value
./old_value/old_value_subdir
./old_value/old_value_subdir/old_value_file
如果我尝试按其列表顺序重命名它们,则会出现此错误
$ find . -name "*" | xargs -n 1 rename -v 's/old_value/new_value/g'
'./old_value' renamed to './new_value'
Can't rename './old_value/old_value_subdir' to './new_value/new_value_subdir': No such file or directory
Can't rename './old_value/old_value_subdir/old_value_file' to './new_value/new_value_subdir/new_value_file': No such file or directory
相反的顺序也有问题。
$ find . -name "*" | tail -r | xargs -n 1 rename -v 's/old_value/new_value/g'
Can't rename './old_value/old_value_subdir/old_value_file' to './new_value/new_value_subdir/new_value_file': No such file or directory
Can't rename './old_value/old_value_subdir' to './new_value/new_value_subdir': No such file or directory
'./old_value' renamed to './new_value'
我想一个人可以多次重命名,用old_value
替换每个文件路径中最后出现的new_value
,并用-mindepth
和{{1 }}参数添加到-maxdepth
。
我正在寻找更好的建议来执行此递归程序化重命名。