如何从命令行删除目录中的所有空目录?

假设我有一个名为foo/的目录。 该文件夹包含子目录。 如何在一个命令中删除所有空目录?

试试这个命令:

 find . -empty -type d -delete 

find命令用于从指定路径搜索与特定搜索条件匹配的文件/目录,在本例中为当前目录(因此为. )。

-empty选项适用于任何空的文件和目录。

-type d选项适用于指定的文件类型; 在这种情况下, d代表文件类型目录

-delete选项是要执行的操作,对于搜索中找到的所有文件都保持true。

您可以利用rmdir命令拒绝删除非空目录,并使用find -depth选项自下而上遍历目录树:

 find . -depth -exec rmdir {} \; 

(并忽略错误),或追加2>/dev/null来真正忽略它们。

find-depth选项开始在目录树的底部查找。

rm -rf将删除目录中的所有文件 (及其子目录,和….)以及所有目录和所有内容。

 rmdir * 

将删除所有空目录。 它会为每个非空的目录和文件抛出一个错误,以防止这些错误使您的终端混乱,使用

 rmdir * 2> /dev/null 

Python方法

 $ tree . ├── empty_dir1 ├── empty_dir2 ├── subdir1 │  ├── file1.abc │  └── file2.abc └── subdir2 ├── file1.abc └── file2.abc 4 directories, 4 files $ python -c 'import os;empty=[r for r,s,f in os.walk(".") if not f and not s and r != "." ];map(lambda x: os.rmdir(x),empty)' $ tree . ├── subdir1 │  ├── file1.abc │  └── file2.abc └── subdir2 ├── file1.abc └── file2.abc 

这样工作如下:

  • 我们使用os.walk()函数递归地遍历目录树。 在每次迭代时, r设置为我们正在访问的当前文件夹, s包含r中的目录列表, f将包含该文件夹中的文件列表。 当然如果fs为空,我们知道r是空的。
  • 首先,list-comprehension允许我们根据上述评估创建empty ,所有空目录的列表。
  • 第二个函数map()用于对empty列表中的每个项执行os.rmdir() 。 可以使用列表理解以及替代。

作为一个脚本,这将是这样的:

 #!/usr/bin/env python import os empty=[] for r,s,f in os.walk("."): if not f and not s and r != ".": empty.append(r) for i in empty: os.rmdir(i)