
現在のディレクトリと次のディレクトリで最大のファイルを見つける必要があります。
ls -Rlh | awk '{print $3 " " $5 " " $9}'
しかし、どのように並べ替えて最大のファイルを選択するかが問題かどうかわかりません。
答え1
GNUfind
+sort
+head
ファイル パスに改行文字が含まれていないと仮定した場合の解決策 (任意のディレクトリの深さレベル):
find . -type f -printf "%s %p\n" | sort -nr | head -1
%s
- ファイルサイズ(バイト単位)を示すフォーマット指定子%p
- ファイル名を指すフォーマット指定子sort -nr
- レコードを逆順に数値順に並べ替えるhead -1
- TOPの最初の行/レコードを印刷する
取得するには人間が読めるファイル サイズの値 - GNU コマンドでパイプラインを拡張しますnumfmt
(サポートされている場合):
find . -type f -printf "%s %p\n" | sort -nr | head -1 | numfmt --to=si
答え2
の場合zsh
、最大の通常ファイルは次のようになります。
ls -ld -- **/*(.DOL[1])
(もちろんls -ld --
任意のコマンドに置き換えることができます。GNUls
または互換-h
コマンドを使用している場合は、人間が読めるサイズ)
.
: のみ通常ファイル (ディレクトリ、シンボリックリンク、デバイス、FIFO などではありません)D
: 隠しディレクトリを含め、隠しディレクトリに降りるOL
: サイズ(長さ)の逆順に並べますL
。[1]
: 最初の一致のみ。
同点の場合は、ランダムに 1 つを取得します。最初のものをアルファベット順にしたい場合は、同点をアルファベット順に並べ替えるための追加のon
( o
rder by n
ame) を追加します。