我付费托管的服务器上的文件总数太高了。我需要找到一种方法来计算每个子文件夹中的文件数量,这样我就可以集中注意力在文件较多的区域。
我找不到一个答案来告诉我如何做我想做的事情,所以我想我会发布我的问题然后回答它以便其他人可以使用它。
我的问题是:
如何循环浏览当前目录中的子目录并创建一个列表,显示每个子目录中递归文件的数量(按文件数排序)?
答案1
du --inodes ${topdir}
将列出每个目录(及其子目录)使用的 inode 数量。您可能希望轻松找出最大的问题:
du --inodes ${topdir} | sort -n
底部的目录将是较大的目录(最后一个目录将是您在上面的命令中传递给du
()的目录)。${topdir}
#>du --inodes /usr/share/gimp | sort -n
1 /usr/share/gimp/2.0/fonts
2 /usr/share/gimp/2.0/tags
2 /usr/share/gimp/2.0/themes/Small
2 /usr/share/gimp/2.0/tips
3 /usr/share/gimp/2.0/tool-presets/Selection
3 /usr/share/gimp/2.0/ui/plug-ins
4 /usr/share/gimp/2.0/dynamics/FX
4 /usr/share/gimp/2.0/images
4 /usr/share/gimp/2.0/ui
6 /usr/share/gimp/2.0/brushes/Splatters
6 /usr/share/gimp/2.0/scripts/images
7 /usr/share/gimp/2.0/tool-presets/Sketch
8 /usr/share/gimp/2.0/brushes/Legacy
8 /usr/share/gimp/2.0/dynamics/Basic
8 /usr/share/gimp/2.0/gflare
9 /usr/share/gimp/2.0/brushes/Sketch
9 /usr/share/gimp/2.0/gradients/gimp-obsolete-files
9 /usr/share/gimp/2.0/tool-presets/FX
10 /usr/share/gimp/2.0/gimpressionist/Paper
11 /usr/share/gimp/2.0/brushes/Basic
11 /usr/share/gimp/2.0/gfig
12 /usr/share/gimp/2.0/brushes/Media
13 /usr/share/gimp/2.0/brushes/Texture
17 /usr/share/gimp/2.0/tool-presets/Paint
21 /usr/share/gimp/2.0/dynamics
26 /usr/share/gimp/2.0/gimpressionist/Presets
32 /usr/share/gimp/2.0/menus
34 /usr/share/gimp/2.0/fractalexplorer
37 /usr/share/gimp/2.0/tool-presets
41 /usr/share/gimp/2.0/brushes/gimp-obsolete-files
41 /usr/share/gimp/2.0/palettes
59 /usr/share/gimp/2.0/patterns
61 /usr/share/gimp/2.0/gimpressionist/Brushes
65 /usr/share/gimp/2.0/themes/Default/images/preferences
70 /usr/share/gimp/2.0/themes/Default/images
72 /usr/share/gimp/2.0/themes/Default
75 /usr/share/gimp/2.0/themes
80 /usr/share/gimp/2.0/gradients
98 /usr/share/gimp/2.0/gimpressionist
101 /usr/share/gimp/2.0/brushes
270 /usr/share/gimp/2.0/scripts
881 /usr/share/gimp/2.0
882 /usr/share/gimp
答案2
我在主文件夹中创建了一个名为的文件filecnt
,其中包含以下代码行:
for d in *; do
if [[ -d $d ]]; then
echo `find $d -type f | wc -l` $d;
fi
done | sort -n -k1
然后我更改文件权限以允许执行:
chmod 755 ~/filecnt
现在,我可以从任何目录运行~/filecnt
以查看当前目录中的子目录列表及其递归文件计数。该列表按文件计数排序(升序)。例如:
0 access-logs
20 logs
187 etc
232 cache
694 tmp
30007 mail
48325 public_html
您只需从 CLI 运行以下命令即可完成相同操作:
for d in *; do if [[ -d $d ]]; then echo `find $d -type f | wc -l` $d; fi done | sort -n -k1
添加-r
到最后的sort
命令以按降序排序。
为了产生稍微更令人满意的输出,您还可以使用以下代码~/filecnt
代替此答案顶部的代码:
echo "File Count Dir Size Directory"
echo "---------- ---------- -------------------------"
for d in *; do
if [[ -d $d ]]; then
echo `find $d -type f | wc -l` | awk '{printf "%10s ", $0;}'
echo `du -h --max-depth=0 $d` | cut -d\ -f 1 $1 | awk '{printf "%10s ", $0;}'
echo $d
fi
done | sort -n -k1
echo
输出如下所示:
File Count Dir Size Directory
---------- ---------- -------------------------
0 0 access-logs
20 8.3M logs
187 4.8M etc
232 228K cache
694 23M tmp
30715 6.4G mail
48272 2.3G public_html
答案3
您可能还想看看“树”,最后一行列出了存在多少个文件和目录。
> tree | tail -1
4449 directories, 62681 files
它应该和“find”一样快。