重命名多个目录

重命名多个目录

我想找到最后一个子目录名为的所有目录文档,然后将它们重命名为医生。怎样才能改名呢?

我有第一部分:

find -type d -name 'doc' 

它返回目录路径,例如:

./foo/bar/doc

答案1

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

答案2

在 zsh 中,您可以使用zmv功能批量重命名文件:

zmv '(**/)doc' '${1}Doc'

如果您有名为 的非目录doc,请确保不通过添加来匹配它们全局限定符:

zmv -Q '(**/)doc(/)' '${1}Doc'

答案3

如果您的目的是将目录大写并且您正在使用bash4+,则应该这样做:

find . -type d -name doc -print0 \
| while read -rd $'\0' file; do
    dname=$(dirname "$file")
    fname=$(basename "$file")
    mv "$file" "$dname"/"${fname^}"
  done

请注意使用\0以确保正确处理不寻常的文件名。

更新

作为jw013评论中指出${var^}并没有像我预期的那样工作。我修改了答案,将路径分隔为目录和文件名,并将运算^符仅应用于$fname.

顺便说一句,谢谢匆忙用于添加缺少的管道。

相关内容