基本的に私がしたいことは、しきい値(私の場合は2.2 GB)を超えるサイズのディレクトリ内のすべてのファイルとそのサイズを出力するスクリプトを作成することです。以下のようにstatコマンドを使ってみました
a=$(stat -c '%s' example.txt)
ただし、ファイルサイズはバイト単位で保存されます。私が欲しいのは、人間が読める形式(MB、GB)でサイズを保存して表示することです。また、ls -lah
の出力を保存し、結果をトリミングして名前とサイズのみを保存することも考えていましたが、これは面倒な作業のように思えました。結果をバイト単位で格納してから算術演算を行う以外に、これを行う他の方法はありますか?.
すでにGNUツールを使用しているため、numfmt
from GNU coreutils:
$ stat -c %s file
310776
$ stat -c '%s' file | numfmt --to=si
311K
$ stat -c '%s' file | numfmt --to=iec
304K
$ stat -c '%s' file | numfmt --to=iec-i
304Ki
$ stat -c '%s' file | numfmt --to=si --suffix=B
311KB
ksh93
:
$ size=$(stat -c %s file)
$ printf "%#d %#i\n" "$size" "$size"
311k 304Ki
または、ls
ビルトイン( ast-open パッケージでスタンドアロンユーティリティとして取得することもできます)でビルドした場合:
$ type ls
ls is a Shell builtin version of /opt/ast/bin/ls
$ ls -Z '%#(size)d %#(size)i' file
311k 304Ki
スクリプトは必要ありません。du -d 0 -t 2200M -h /some/dir/name/*
を使用してください。
例。 du
を使用して、/ bin500Kより大きいすべてのファイルを表示します。
du -d 0 -t 500K -h /bin/*
出力:
1.1M /bin/bash
620K /bin/btrfs
2.0M /bin/busybox
1.6M /bin/ksh93
788K /bin/zsh
sort
には、上記をサイズ順に並べ替える-h
があります。
du -d 0 -t 500K -h /bin/* | sort -h
出力:
620K /bin/btrfs
788K /bin/zsh
1.1M /bin/bash
1.6M /bin/ksh93
2.0M /bin/busybox
親切な人 [〜#〜]ここ[〜#〜] はあなたを助けるべき解決策を提示します:
find . -type f -size +2G -exec ls -sh {} \; 2> /dev/null
完全に修飾されたパス名とサイズが人間が読める形式で表示され、すべて適切にソートされています。
2.2Gが必要な場合、find
は小数を処理しないため、少し計算して(2048 + 205 =)2253M
find . -type f -size +2253M -exec ls -sh {} \; 2> /dev/null
find
のパラメーターを使用して、検索の深さと必要なサイズを制限できます(man find
)、およびawk
を使用して列をファイルまたは配列に出力します。
編集:-lhは-shに変更され、awkは@Olorinの改善に従って削除されました
du -h example.txt|cut -f 1
(-h
= 人間が読める形式)
これはyourの「人間による読みやすさ」の考え方とdのこの概念の考え方は同じであるという仮定の下にあります。