Avi*_*ash 4 shell bash find disk-usage files
我们托管大小为 4 TB 的份额。找到最大大小的文件的效率如何。
通常我们使用:
du -ak | sort -k1 -bn | tail -1
Run Code Online (Sandbox Code Playgroud)
扫描如此巨大的份额然后再次对它们进行排序并不容易。
任何只知道共享中最大的文件的建议。
并且还du -ak返回当前目录的大小,如(“。123455”)。我该如何避免?
除了扫描相关目录树以收集文件大小以便确定最大文件之外,我不知道还有其他任何方法。如果您知道存在大小阈值,则可以指示 find 关闭低于此阈值大小的文件。
$ find . -type f -size +50M ....
Run Code Online (Sandbox Code Playgroud)
将关闭任何小于 50MB 的文件。如果您知道这些文件始终位于特定位置,则可以将您的目标定位find到该区域,而不是扫描整个磁盘。
注意:这是我通常采用的一种方法,因为您通常不应该在非/var类型的目录中获取随机文件。
至于du你可以告诉它使用-h开关以人类可读的格式输出大小。该sort命令也知道如何对这些进行排序,再次使用它的-h开关。
$ find /home/saml/apps -type f -size +50M -print0 | \
du -h --files0-from=- | sort -h | tail -1
1.4G /home/saml/apps/MeVisLabSDK2.2.1_gcc-64.bin
Run Code Online (Sandbox Code Playgroud)
上面find使用空 ( \0) 字符作为分隔符返回大于 50MB 的文件列表。该du命令采用此列表并知道使用--files0-from=-开关在空值上进行拆分。然后,此输出按其人工格式大小进行排序。
没有tail -1:
$ find /home/saml/apps -type f -size +50M -print0 | \
du -h --files0-from=- | sort -h
55M /home/saml/apps/MeVisLabSDK/Packages/MeVis/ThirdParty/lib/libQtXmlPatternsMLAB.so.4.6.2.debug
55M /home/saml/apps/MeVisLabSDK/Packages/MeVis/ThirdParty/Sources/Qt4/qt/lib/libQtXmlPatternsMLAB.so.4.6.2.debug
56M /home/saml/apps/MeVisLabSDK/Packages/FMEwork/ThirdParty/lib/libitkvnl-4.0_d.a
66M /home/saml/apps/MeVisLabSDK/Packages/FMEwork/Release/lib/libMLDcmtkAccessories_d.so
79M /home/saml/apps/MeVisLabSDK/Packages/FMEwork/Release/lib/libMLDcmtkMLConverters_d.so
94M /home/saml/apps/MeVisLabSDK/Packages/MeVis/ThirdParty/lib/libQtGuiMLAB.so.4.6.2.debug
94M /home/saml/apps/MeVisLabSDK/Packages/MeVis/ThirdParty/Sources/Qt4/qt/lib/libQtGuiMLAB.so.4.6.2.debug
112M /home/saml/apps/ParaView-3.14.1-Linux-64bit.tar.gz
204M /home/saml/apps/Slicer-4.1.1-linux-amd64.tar.gz
283M /home/saml/apps/MeVisLabSDK/Packages/FMEwork/Release/lib/libMLDcmtkIODWrappers_d.so
1.4G /home/saml/apps/MeVisLabSDK2.2.1_gcc-64.bin
Run Code Online (Sandbox Code Playgroud)