![如果文件数超过 X 则查找目录](https://linux22.com/image/80755/%E5%A6%82%E6%9E%9C%E6%96%87%E4%BB%B6%E6%95%B0%E8%B6%85%E8%BF%87%20X%20%E5%88%99%E6%9F%A5%E6%89%BE%E7%9B%AE%E5%BD%95.png)
我想知道是否有人可以建议最好的方法来做到这一点。在我的 Web Dir 中有大约 100 个文件夹;每个文件夹都是一个 clientID。
每个 ClientID 文件夹内都有一个文件夹子集。每个文件夹子集中都有一组相同的结构化文件夹。
例子:
httpdocs/client1234/amazon/
httpdocs/client1234/ebay/
在 Amazon 和 Ebay 的文件夹中,我们的目录结构如下:
In/
Out/
Backup/
我想做的是扫描整个 Web 目录并找到 IN 目录中包含超过 50 个文件的文件夹。
**编辑包含在 IN 目录中。只对 IN 目录上的文件计数感兴趣。
答案1
这一行应该有效:
find httpdocs -mindepth 2 -name In | xargs ls -1 | awk '$0 ~ /httpdocs.*In/{name=$0; start=NR} (NR-start)==50{print name;}'
它将首先查找所有In
目录,然后列出其所有文件,最后过滤那些文件数超过 50 个的目录。
-mindepth
根据您的开始文件夹进行调整。
答案2
这将循环遍历所请求的目录,计算文件(以及子目录的文件)以查看是否有超过 50 个文件;如果是这样,它会回显匹配的目录:
for dir in httpdocs/*/*/In
do
count=$(find $dir | wc -l)
if [ $count -gt 50 ]
then
echo $dir has more than 50 files
fi
done
注意我严格使用“大于”50,因为find
的输出在其输出到wc -l
.
答案3
#!/bin/bash
for dir in `find ./httpdocs/*/*/ -name In -type d` ; do
count=`find $dir -type f | wc -l`
if [[ $count -gt 50 ]]
echo $dir
fi
done