编写一个递归脚本将所有文件向上移动一个文件夹

编写一个递归脚本将所有文件向上移动一个文件夹

我知道已经有人问过很多此类问题。尽管如此,其中一些仍然没有得到答复,而另一些则没有回答我的问题。

考虑以下目录层次结构:

比如说,一个目录f1包含多个目录。我想编写一个脚本将所有目录及其子目录中的所有文件移动到除目录之外的相应父目录f1

现在考虑一个例子:

目录 f1 包含文件 file1,file2,file3,...,filen 和子目录 sd1,sd2,sd3,...,sdn,而子目录又包含子目录!

每个子目录依次包含与父目录同名的文件,即 file1,file2... 。但是,所有文件都有不同的内容。操作完成后,这些子目录中的所有文件都应移动到父目录中。我认为名称冲突不应该成为问题,因为所有文件最终都会有不同的“路径名”。如果仅可能发生名称冲突,则它位于根目录中,因为文件无法移动到根目录的父目录。在那里,该单词root应附加到原来存在的文件中。

一些示例路径:

f1/sd1/sd1/file1
f1/sd1/file1
f1/file1

手术后,

f1/sd1/sd1/file1 -> f1/sd1/file
f1/sd1/file1     -> f1/file1
f1/file1         ->f1/file1_root

有什么办法可以解决这个问题吗?

答案1

find您可以使用和将每个文件向上移动-execdir

find f1 -mindepth 2 -type f -execdir mv -t ../ {} +

请注意,这将覆盖重复的文件名,请考虑使用它mv -b来备份现有文件。

  • -mindepth 2将排除最低级别的文件夹 ( f1)。
  • -execdir ... +将在找到的文件的文件夹中运行该命令。

相关内容