在 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
。