将第三级目录重命名为相同名称

将第三级目录重命名为相同名称

我有一个目录A,其中包含一百个子目录。这些子目录中的每一个都包含一个目录。

例如,如何将一百个目录中的每个目录中的这个单个目录重命名为相同的名称X?我已经尝试过该mmv命令,但没有运气。

任何帮助,将不胜感激!

答案1

也许是更好的方法,但是:

使用bashfind

while IFS= read -r dir; do
    mv -- "$dir" "${dir%/*}/X"
done< <(find . -maxdepth 2 -mindepth 2 -type d)

首先进行测试运行,例如:

while IFS= read -r dir; do
    printf 'mv "%s" "%s"\n' "$dir" "${dir%/*}/X"
done< <(find . -maxdepth 2 -mindepth 2 -type d)

简而言之:

  • find
    • .当前目录作为基础(通常A在您的情况下)
    • type d(目录)最小和最大深度为 2
  • bash读取并移至 $dirfind$dir
    • ${dir%/*}删除最后一个/和之后的所有内容
      • /X附加新的目录名称。

例如find ./A ...,如果您居住在 A 级以下一级,则使用此类。

可以选择添加-vmv(非 POSIX)以显示所采取的操作。

相关内容