ディレクトリとサブディレクトリ内で最大のファイルを見つける最も簡単な方法

ディレクトリとサブディレクトリ内で最大のファイルを見つける最も簡単な方法

現在のディレクトリと次のディレクトリで最大のファイルを見つける必要があります。

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( order by name) を追加します。

関連情報