Bash 如何在linux上列出非空的子目录?

Bash 如何在linux上列出非空的子目录?,bash,unix,directory,Bash,Unix,Directory,我有一个包含多个子目录的目录。我只想列出那些至少包含一个文件的子目录。我该怎么做呢?怎么样: find /nominated/directory -type f | sed 's%/[^/]*$%% | sort -u 查找文件-删除文件名部分-唯一排序 它不会列出只包含其他子目录的子目录 find . -type f -print0 | xargs -0 -n 1 dirname | sort -u 将为您提供所有非空目录。如果要排除只包含其他目录(但不包含文件)的目录,则其他答案之一可能

我有一个包含多个子目录的目录。我只想列出那些至少包含一个文件的子目录。我该怎么做呢?

怎么样:

find /nominated/directory -type f |
sed 's%/[^/]*$%% |
sort -u
查找文件-删除文件名部分-唯一排序

它不会列出只包含其他子目录的子目录

find . -type f -print0 | xargs -0 -n 1 dirname | sort -u

将为您提供所有非空目录。如果要排除只包含其他目录(但不包含文件)的目录,则其他答案之一可能会更好…

对于相同的内容,语法略短一些:find-类型f-exec dirname{}\|有点抱歉。不匹配的单一报价导致提前终止。完全是我的错。你想要的是目录的直接子目录,还是所有子目录,不管嵌套有多深?如果子目录包含其他子目录但没有文件,我不希望它列出,-mindepth和-maxdepth选项将此限制为仅直接子目录。调整这些值以影响返回结果的级别。不使用它们会找到任何级别的所有子目录。记住-不是GNU的东西。为了便于携带,请使用!而不是——不是(真的;我不明白你为什么不总是使用!而不是——不是,视为——不给你任何好处)因为!看起来它应该是一个shell元字符,我永远记不起是否必须引用它;-)但你说得对,它更便于携带。(我想既然这个答案被接受了,GNU特定的语法就适用于OP)
 find . -mindepth 1 -maxdepth 1 -not -empty -type d