递归清理文件夹中没有文件的所有文件夹和子文件夹

IMT*_*Man 3 bash directory files delete

我有一个文件夹,文件夹中的文件夹中有很多文件夹等等......有些文件夹有文件,有些没有。我想通过查找所有没有文件的目录并删除它们来清理主文件夹。一个例子可能更有意义:

所以如果我从这个开始:

  • mainFolder
    • folder1
      • folder1 (空的)
      • folder2
        • file.txt
      • folder3 (空的)
    • folder2
      • folder1 (空的)
      • folder2 (空的)
      • folder3
        • folder1
          • folder1 (空的)
    • folder3
      • folder1
        • file.txt

我应该以这样的方式结束:

  • mainFolder
    • folder1
      • folder2
        • file.txt
    • folder3
      • folder1
        • file.txt

所以:

  • /mainFolder/folder1/folder1 被删除,因为它没有文件
  • /mainFolder/folder1/folder3 被删除,因为它没有文件
  • /mainFolder/folder2 被删除是因为它没有文件,甚至所有的子文件夹都是空的

我希望这是有道理的...

我唯一的想法是从mainFolder每个子文件夹开始并递归向下移动,删除空的子文件夹。

And*_*ton 10

看看这是否符合您的要求:

find mainFolder -depth -empty -type d -exec rmdir {} \;
Run Code Online (Sandbox Code Playgroud)

这应该mainFolder使用深度优先遍历找到空的目录,并删除这些目录。由于它执行深度优先遍历,因此在删除子目录时,如果父目录为空,find则会将其标识为空并将其删除。

  • 是否有理由不使用 `-delete` 代替 `-exec rmdir {} \;`?除了更简单之外,可能还有很大的速度差异:`-delete` 是内置于 `find` 的,而 `rmdir` 是一个外部可执行文件。 (2认同)