CentOS 6.8を使用しています
拡張子が.logのすべてのファイルを検索し、ファイルサイズ順に並べ替えて、ファイル名の横にファイルサイズを表示できるかどうかを知りたいのですが。
現在、このコマンドを使用して、拡張子が.logのすべてのファイルを検索しています。
find . -name \*.log
これは私にとってはうまくいくようです:
find . -name \*.log -ls | sort -r -n -k7
2つのオプションがあります。 1つはbash中心で、もう1つは楽しみのためのものです。
( shopt -s globstar dotglob; stat --format "%s %n" -- **/*.log | sort -rn )
この:
shopt
ステートメントが現在/実行中のシェルに影響しないように、サブシェルで実行されます。**
構文を使用してサブディレクトリ内のファイルを照合できます。 dotglobは、シェルグロビングが.
で始まるディレクトリに一致することを可能にしますstat
は、ファイルサイズとその名前を収集する方法です。 CentOSシステムにはデフォルトでインストールされます-POSIX仕様ではありません。**/*.log
によって行われ、現在のディレクトリとすべてのサブディレクトリで一致するファイル名(* .log)が収集されます。r
を付けずに-n
を使用して、サイズの昇順で並べ替えます)。別のbash中心のオプションですが、ls
フラグを実行して、引数をサイズで並べ替えます。
shopt -s globstar dotglob
ls -lS **/*.log
# or, in reverse:
ls -lrS **/*.log
システムと忍耐力を行使するには、特定のサイズのファイルを特定の順序で検索します。
for((i=9223372036854775807;i>=0;i--)); do find . -name \*.log -size ${i}c -exec stat --format "%s %n" {} + ; done
これは、9,223,372,036,854,775,807( 9 quintillion )find
コマンドを実行し、可能なすべてのサイズの* .logファイルを探し、再度stat
を呼び出してファイルのサイズと名前のみを表示します。同じサイズのファイルが複数ある場合は、findの{} +
構文を含めて、環境に合わせてできるだけ多くのファイル名をstat
に渡しました。シェルの整数サイズに基づいて、または最大のログファイルの大きさがわかっている場合は、for
ループ範囲を調整する必要があります。この「オプション」には、stat
呼び出しを単純なls
に置き換えると、POSIXに準拠できるという「利点」があります。