フォルダー内で最大のファイルを見つける必要があります。
フォルダーを再帰的にスキャンし、コンテンツをサイズで並べ替えるにはどうすればよいですか?
を使用してみましたls -R -S
が、これはディレクトリもリストします。
私も使用してみましたfind
。
フォルダー内で最大のファイルを見つける必要があります。
フォルダーを再帰的にスキャンし、コンテンツをサイズで並べ替えるにはどうすればよいですか?
を使用してみましたls -R -S
が、これはディレクトリもリストします。
私も使用してみましたfind
。
回答:
また、これを行うこともできdu
ます。念のため、このバージョンのdu
次のものを使用しています。
$ du --version
du (GNU coreutils) 8.5
アプローチ:
$ du -ah ..DIR.. | grep -v "/$" | sort -rh
このコマンドdu -ah DIR
は、指定されたディレクトリ内のすべてのファイルとディレクトリのリストを生成しますDIR
。-h
私が好む人間が読めるサイズを生成します。不要な場合は、そのスイッチをドロップします。head -6
出力の量を制限するためだけに使用しています!
$ du -ah ~/Downloads/ | head -6
4.4M /home/saml/Downloads/kodak_W820_wireless_frame/W820_W1020_WirelessFrames_exUG_GLB_en.pdf
624K /home/saml/Downloads/kodak_W820_wireless_frame/easyshare_w820.pdf
4.9M /home/saml/Downloads/kodak_W820_wireless_frame/W820_W1020WirelessFrameExUG_GLB_en.pdf
9.8M /home/saml/Downloads/kodak_W820_wireless_frame
8.0K /home/saml/Downloads/bugs.xls
604K /home/saml/Downloads/netgear_gs724t/GS7xxT_HIG_5Jan10.pdf
最小から最大に並べ替えるのに十分簡単:
$ du -ah ~/Downloads/ | sort -h | head -6
0 /home/saml/Downloads/apps_archive/monitoring/nagios/nagios-check_sip-1.3/usr/lib64/nagios/plugins/check_ldaps
0 /home/saml/Downloads/data/elasticsearch/nodes/0/indices/logstash-2013.04.06/0/index/write.lock
0 /home/saml/Downloads/data/elasticsearch/nodes/0/indices/logstash-2013.04.06/0/translog/translog-1365292480753
0 /home/saml/Downloads/data/elasticsearch/nodes/0/indices/logstash-2013.04.06/1/index/write.lock
0 /home/saml/Downloads/data/elasticsearch/nodes/0/indices/logstash-2013.04.06/1/translog/translog-1365292480946
0 /home/saml/Downloads/data/elasticsearch/nodes/0/indices/logstash-2013.04.06/2/index/write.lock
逆に、最大から最小へ:
$ du -ah ~/Downloads/ | sort -rh | head -6
10G /home/saml/Downloads/
3.8G /home/saml/Downloads/audible/audio_books
3.8G /home/saml/Downloads/audible
2.3G /home/saml/Downloads/apps_archive
1.5G /home/saml/Downloads/digital_blasphemy/db1440ppng.zip
1.5G /home/saml/Downloads/digital_blasphemy
ディレクトリのみを表示せず、ファイルのみを表示します。
$ du -ah ~/Downloads/ | grep -v "/$" | sort -rh | head -6
3.8G /home/saml/Downloads/audible/audio_books
3.8G /home/saml/Downloads/audible
2.3G /home/saml/Downloads/apps_archive
1.5G /home/saml/Downloads/digital_blasphemy/db1440ppng.zip
1.5G /home/saml/Downloads/digital_blasphemy
835M /home/saml/Downloads/apps_archive/cad_cam_cae/salome/Salome-V6_5_0-LGPL-x86_64.run
最小から最大のリストだけでなく、問題のある上位6つのファイルが必要な場合は、ソートスイッチを逆にして(-r
)をドロップし、のtail -6
代わりに使用できますhead -6
。
$ du -ah ~/Downloads/ | grep -v "/$" | sort -h | tail -6
835M /home/saml/Downloads/apps_archive/cad_cam_cae/salome/Salome-V6_5_0-LGPL-x86_64.run
1.5G /home/saml/Downloads/digital_blasphemy
1.5G /home/saml/Downloads/digital_blasphemy/db1440ppng.zip
2.3G /home/saml/Downloads/apps_archive
3.8G /home/saml/Downloads/audible
3.8G /home/saml/Downloads/audible/audio_books
grep -v "/$"
ディレクトリにはスラッシュが追加されていないため、この部分は期待どおりに動作していないようです。結果からディレクトリを除外する方法を知っていますか?
/
のs /home/saml/Downloads/audible
がありません。たとえば、ディレクトリのように見えますが、スラッシュはありません。/home/saml/Downloads/
スラッシュしかありませんが、これはおそらく、initialの引数を指定するときにスラッシュで書いたためでしょうdu
。
現在のディレクトリとそのサブディレクトリ内のすべてのファイルを検索し、それらのサイズに応じて(パスを考慮せずに)リストし、ファイル名に改行文字が含まれないと仮定する場合、GNU find
でこれを行うことができます:
find . -type f -printf "%s\t%p\n" | sort -n
man find
GNUシステム上:
-printf format
True; print format on the standard output,
interpreting `\' escapes and `%' directives.
Field widths and precisions can be specified
as with the `printf' C function. Please note
that many of the fields are printed as %s
rather than %d, and this may mean that flags
don't work as you might expect. This also
means that the `-' flag does work (it forces
fields to be left-aligned). Unlike -print,
-printf does not add a newline at the end of
the string. The escapes and directives are:
%p File's name.
%s File's size in bytes.
からman sort
:
-n, --numeric-sort
compare according to string numerical value
次のコマンドを試してください。
ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20
現在のディレクトリ内の上位20個のファイルを再帰的に一覧表示します。
注意:オプション-h
のためにはsort
、インストールするしましたので、OSX / BSDでは使用できませんsort
からcoreutils
(例えば経由brew
)とローカルbinパスを適用しPATH
、例えば
export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" # Add a "gnubin" for coreutils.
または、次を使用します。
ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20
最大のディレクトリを使用するにはdu
、たとえば:
du -ah . | sort -rh | head -20
または:
du -a . | sort -rn | head -20
これにより、すべてのファイルが再帰的に検索され、サイズで並べ替えられます。すべてのファイルサイズをkbで出力し、切り捨てて0 KBのファイルが表示される場合がありますが、使用するには十分であり、OSXで動作します。
find . -type f -print0 | xargs -0 ls -la | awk '{print int($5/1000) " KB\t" $9}' | sort -n -r -k1
find . -type f
それはあなたは正しい、再帰的に動作します...ファイルを見つけたが、それはそれは見つかったすべてのファイル、自分自身ではないディレクトリの一覧表示
を使用するとzsh
、(ls -l
ディスク使用量ではなく、出力のサイズ列のような見かけ上のサイズに関して)最大のファイルが見つかります:
ls -ld -- **/*(DOL[1])
最大の6つの場合:
ls -ld -- **/*(DOL[1,6])
それらをファイルサイズでソートするには、ls
の-S
オプションを使用できます。一部のls
実装には、リストをソート-U
しls
ないオプションもあります(リストはすでにサイズでソートされてzsh
いるため)。
これは、さまざまな理由で非常によく知られたニーズであり(ディレクトリで最新のバックアップを見つけるのが好きです)、驚くほど単純なタスクです。
find、xargs、stat、tail、awk、およびsortユーティリティを使用するLinuxソリューションを提供します。
ほとんどの人はいくつかのユニークな答えを提供しましたが、ファイル名を適切に処理し、ユースケースを簡単に変更できるため(統計の変更、引数の並べ替え)
また、Windowsでもこの機能を使用できるPythonソリューションを提供します
find . -type f -print0 | xargs -0 -I{} stat -c '%s %n' {} | sort -n
# Each utility is split on a new line to help
# visualize the concept of transforming our data in a stream
find . -type f -print0 |
xargs -0 -I{} stat -c '%s %n' {} |
sort -n |
tail -n 1 |
awk '{print $2}'
# (Notice only the first argument of stat changed for new functionality!)
find . -type f -print0 | xargs -0 -I{} stat -c '%Y %n' {} |
sort -n | tail -n 1 | awk '{print $2}'
説明:
#!/usr/bin/env python
import os, sys
files = list()
for dirpath, dirname, filenames in os.walk(sys.argv[1]):
for filename in filenames:
realpath = os.path.join(dirpath, filename)
files.append(realpath)
files_sorted_by_size = sorted(files, key = lambda x: os.stat(x).st_size)
largest_file = files_sorted_by_size[-1]
print(largest_file)
このスクリプトの説明には少し時間がかかりますが、基本的にスクリプトとして保存すると、コマンドラインで指定された最初の引数を検索し、そのディレクトリで最大のファイルを返します。このスクリプトはエラーチェックを行いませんが、Pythonでこれにアプローチする方法のアイデアを提供するはずです。これにより、この問題を解決するプラットフォームに依存しない素晴らしい方法が得られます。