仅重命名树中的最后一个目录

仅重命名树中的最后一个目录

在 unix 中,从顶层执行以下命令将重命名所有名为 的Utility目录Claim

 find . -type d -name Utility -exec sh -c 'mv "${0}" "${0%/Utility}/Claim"' {} \;

但是我只想重命名最后一级的目录Utility,而不是全部。例如,如果结构是,当从顶层执行时,/Sample/Utility/version1/Utility/test.txt我只想重命名最后一个文件夹。Utility

答案1

这是我的建议:

find . -type d -name Utility -print | sort -r | awk '{if(substr(p,1,length($0))!=$0) print $0; p=$0}' | while read i; do echo mv "${i}" "${i%Utility}Claim"; done

find用于查找当前文件夹中所有名为 Utility 的目录并打印找到的名称。
名称按相反顺序排序。
awk仅打印不是前一行(名称)前缀的行(名称)。例如,此步骤在“/Sample/Utility/version1/Utility”之后找到时删除“/Sample/Utility”。
在 shell 循环中读取行,然后我打印出您想要的 mv 命令。删除“echo”以执行 s mv

相关内容