将所有子目录的内容移至其子目录中

将所有子目录的内容移至其子目录中

我面临的问题是我有一个包含数千个子目录的目录,每个子目录都包含更多子目录,并且所有这些子目录里面都是图像。

我拥有的有数千个:

/1056/7624/image.png

我基本上想删除这里的 7624 目录,这样我最终会得到数千个这样的目录:

/1056/image.png

我尝试过mv */*/* */*,但只是吓坏了......这是否可以使用终端命令来完成?

我正在尝试这样做,这样我就可以使用这个多文件上传器,而无需进入 50 个目录来获取 50 张图像。

答案1

for dir in */*; do
  if [[ -d "$dir" ]]; then
    ( 
      cd "$dir"
      mv -n * ..
      cd ..
      rmdir "$( basename "$dir" )"
    )
  fi
done

请注意,任何重复的文件或子目录名称都会不是被移动,因此在这些情况下的深层目录将不是由于仍然包含文件而被删除。

答案2

这会将当前目录和任何子目录中的所有文件移动到当前级别。重命名任何具有相同名称并附加数字的文件。

find ./ -type f -print -exec mv --backup=numbered {} . \;

然后你可以确保你得到了一切

find ./ -mindepth 2 -type f

相关内容