说我有一个名为的目录foo/
。此文件夹包含子目录。如何在一个命令中删除所有空目录?
说我有一个名为的目录foo/
。此文件夹包含子目录。如何在一个命令中删除所有空目录?
Answers:
试试这个命令:
find . -empty -type d -delete
该find
命令用于从指定路径(在本例中为当前目录.
)中搜索与特定搜索条件匹配的文件/目录。
该-empty
选项对于任何为空的文件和目录均适用。
该-type d
选项适用于真正的文件指定类型; 在这种情况下,d
代表文件类型目录。
该-delete
选项是要执行的操作,并且对于在搜索中找到的所有文件均适用。
rm -rf <directory-name>
。这将删除目录及其所有内容,包括文件和子目录。该-r
选项表示递归删除,而该-f
命令表示删除前不提示。但是,如果要在删除目录/文件之前提示您,请将该-f
选项替换为该-i
选项。
stdout
一个命令(例如find
)到stdin
其他(例如rm
),但是,必须非常小心,因为它可能消灭或删除文件/文件不想目录删除!有关如何执行此操作的更多信息,请参见man
每个命令的页面。为了安全起见,在尝试使用真实事物之前,请始终在临时目录中对其进行测试。
rmdir *
将删除所有空目录。它将为每个非空目录和文件引发一个错误,以防止这些错误使您的终端混乱,请使用
rmdir * 2> /dev/null
rmdir * 2>/dev/null || true
。(find(1)方法更适合脚本编写,但由于其他原因:因为它可以更好地表达您想要执行的操作。)
$HOME
。带着邪恶的笑容。
find . -type d -empty -delete -maxdepth 1
因为如果您只想删除的直接子目录foo/
。
$ 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
并将包含该文件夹中的文件列表。当然,如果f
和s
为空,我们知道那r
是空的。empty
基于上述评估创建空目录的列表。map()
用于对列表中的os.rmdir()
每个项目执行empty
。列表理解既可以使用也可以使用。作为脚本,应为:
#!/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)
/bin/sh
仅bash,而Python实际上是比这两种语言更优雅的语言