这里有find . -type d -empty命令,但它只找到字面上的空目录。
我想要实现的是一些更复杂的东西:我希望找到只有其他目录或空目录的空目录或目录,这个规则应该递归地传递。
例如,在这个目录结构:~1/11/111/中,它会找到1/、1/11/和1/11/111/,但是如果在树中的任何一点上都有一个文件,例如,如果在1/11/111/file1中有一个文件,那么在文件应该返回之前没有一个文件。因此,如果在1/11/111/1111/旁边有一个空目录1/11/111/file1,那么应该返回1111。
我之所以要这样做是因为我想删除我的空文件夹。
现在,我可以通过一次又一次运行find . -type d -empty -delete来实现这一点,但我想要一种在删除它们之前将其可视化的方法。
这个是可能的吗?
发布于 2019-07-23 08:05:03
要打印空目录而不删除任何目录,我们必须做的不仅仅是从叶子上删除空目录。
像这样的事情可能会奏效:
find dir/ -type d ! -exec sh -c \
'find "$1" ! -type d -print -quit | grep -q . >/dev/null' sh {} \; -print外部find查找每个目录,并对每个目录运行另一个find。内部find会查看该目录(递归地)是否包含任何非目录,如果包含,则返回一个真值。然后外部find打印返回false的每个目录(即不包含任何非目录)。
不过,对于递归的finds来说,这是相当慢的。一个更好的解决方案可能是缓存文件所在的目录,或者是一种从空目录开始直到包含文件的分支的方法(S)。
https://unix.stackexchange.com/questions/531618
复制相似问题