假设我有 200 个目录并且它有可变的层次结构子目录,我如何使用带查找的 mv 命令或任何组合来重命名目录及其子目录?
for dir in ./*/; do (i=1; cd "$dir" && for dir in ./*; do printf -v dest %s_%02d "$dir" "$((i++))"; echo mv "$dir" "$dest"; done); done
这是用于 2 级子目录,是否有更清晰的方法来实现多层次结构?欢迎任何其他单行命令建议/解决方案。
最佳答案
我有一项特定任务 - 替换目录和文件中的非 ASCII 符号和方括号。它工作正常。
首先,作为一个工作示例,正是我的情况:
find . -depth -execdir rename -v 's/([^\x00-\x7F]+)|([\[\]]+)/\_/g' {} \;
或单独的非ascii和括号:
find . -depth -execdir rename -v 's/[^\x00-\x7F]+/\_/g' {} \;
find . -depth -execdir rename -v 's/[\[\]]+/\_/g' {} \;
如果我们只想处理目录,请添加 -type d
(在 -depth
选项之后)
现在,从更广义的角度来看:
find . -depth [-type d] [-type f] -execdir rename [-v] 's/.../.../g' '{}' \;
在这里我们可以控制目录/文件和详细程度。 {} 周围的引号可能需要也可能不需要(在 ; 之前的反斜杠 ; 服务相同,可以用引号代替)
关于linux - 如何在 linux 中递归重命名目录和子目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43134407/