从特定深度移动特定目录

从特定深度移动特定目录

我尝试制作一个 bash 脚本来帮助我从文件夹中移动特定的子文件夹。
问题是,在主文件夹中,photos我有这样命名的文件夹: 1234567890其中文件夹的名称重复,然后再次重复相同的文件夹结构。我要移动的子文件夹位于名称中包含一个字符的最后一个文件夹中。我要移动的子文件夹的名称中包含 2 个或更多字符。文件夹结构为0-9// 0-9/ 0-9subdir 未指定目标文件夹,所以假设是desktop/photos1

例子:photos/0/0/0/23345 photos/1/9/0/12578

如果两个子目录具有相同的名称,例如photos/0/0/0/23345photos/1/1/1/23345我想重命名其中之一。我在 OSX 上

答案1

  • 在带有 GNU coreutils 的系统上(因此不是 OSX 的默认安装),您可以使用

    mv -f --backup=numbered -t /path/to/target photos/*/*/*/*/
    

    这会动全部下深度 4 的子目录photos/,无论深度 1、2 和 3 的目录名称是什么。

    这种方法的优点是:仅在需要时才进行重命名(如果您只有一个12578子文件夹,例如 in photos/1/9/0/,则不会重命名)。

  • 如果没有 GNU coreutils,您可以使用这个(有点复杂)脚本,它将重命名所有子文件夹。例如photos/1/9/0/12578将被重命名12578-190

    target=/some/path
    for i in {0..9}; do
      for j in {0..9}; do
        for k in {0..9}; do
          for dir in "photos/$i/$j/$k/*/"; do
            mv -- "$dir" "$target/$(basename $dir)-$i$j$k"
          done
        done
      done
    done
    

相关内容