我有一个包含一千多个子目录的目录。我只想“ ls”包含两个以上文件的所有目录。我不需要包含少于2个文件的目录。这是C壳,不是bash。有人知道有很好的命令吗?
我尝试了此命令,但未提供所需的输出。我只想要包含2个以上文件的目录的完整列表。它不起作用的原因是,它将进入那些目录中的sub dirs来查找它们是否具有两个以上的文件。我不想进行递归搜索。只是它们所在的主目录中的一级目录的列表。
$ find . -type f -printf '%h\n' | sort | uniq -c | awk '$1 > 2'
答案 0 :(得分:0)
我的错误,我在考虑bash而不是csh。尽管我没有要测试的csh,但我认为这是同一件事的csh语法:
foreach d (*)
if (d "$d" && `ls -1 "$d"|wc -l` > 2) echo "$d"
end
我添加了一个保护措施,以防止不必要地处理非目录,并且在有任何“有趣”文件或目录名称(例如包含空格)的情况下,我添加了双引号。
一个可能的问题(我不知道您的确切任务是什么):任何直接子目录也将被视为文件。
对不起,我在这里进行bash工作
for d in *;do if [ $(ls -1 $d|wc -l) -gt 2 ];then echo $d;fi;done
对于更快的解决方案,如果您使用的是纯Unix,则可以尝试通过破坏目录本身的格式来“作弊”。他们只是将自己的内容归档,在这种情况下可以进行分析。不用说这是不便携的,例如Windows上运行的任何bash,因此不推荐。