ディレクトリ内の各日付の最大ファイルを検索する

ディレクトリ内の各日付の最大ファイルを検索する

次のようなディレクトリがあります。

-rw-r--r-- 1 root root 223K Apr 28 14:25 2015.04.28_14.25
-rw-r--r-- 1 root root 253K Apr 28 14:55 2015.04.28_14.55
-rw-r--r-- 1 root root 276K Apr 28 15:25 2015.04.28_15.25
-rw-r--r-- 1 root root 254K Apr 28 15:55 2015.04.28_15.55
-rw-r--r-- 1 root root 122K Apr 29 09:08 2015.04.29_09.08
-rw-r--r-- 1 root root 127K Apr 29 09:38 2015.04.29_09.38
-rw-r--r-- 1 root root  67K Apr 29 11:43 2015.04.29_11.43
-rw-r--r-- 1 root root 137K May 1 12:13 2015.04.29_12.13
-rw-r--r-- 1 root root 125K May 1  12:43 2015.04.29_12.43
-rw-r--r-- 1 root root 165K May 1 13:13 2015.04.29_13.13
-rw-r--r-- 1 root root 110K May 1 13:43 2015.04.29_13.43

私の質問は、各日付について最大のファイルを見つける方法です。

たとえば、4月28日の最大ファイル、4月29日、5月1日の最大ファイルなどです。

オペレーティングシステム情報: Linux Kali 3.18.0-kali3-amd64 #1 SMP Debian 3.18.6-1~kali2 (2015-03-02) x86_64 GNU/Linux

答え1

GNU/何でも、

ls -l --time-style=+%s \
| awk '{$6 = int($6/86400); print}' \
| sort -nk6,6 -nrk5,5 \
| sort -sunk6,6

これにより UTC 境界が提供され、必要に応じて計算に現地時間オフセットが追加されます。たとえば、int(($6-7*3600)/86400) は -0700 真夜中の境界を意味します。

答え2

statファイル情報を取得し、各awk日付の最大値を決定するには:

stat -c $'%.10y\t%s\t%n' * |
  awk 'BEGIN { FS=OFS="\t" }
       s[$1]<$2 { s[$1]=$2 ; n[$1]=$3 }
       END { for (d in n) print d,s[d],n[d] | "sort" }'

Tab出力は(日付、サイズ、ファイル名)タプルの別々のリストです。

答え3

"ls"を使用してファイルをサイズ順にインポートし、結果を制限して最大の結果を得るスクリプトを作成します。

たとえば、「ls -lS 2015.04.29*」を実行すると、サイズが小さい順にファイルのリストが表示されます。または 'ls -lS 2015.04.29*|head -1' と入力すると最大値が得られます。

必要に応じて、そこからファイル名などを削除することもできます(ファイル名内のすべての日付を繰り返して、すべての日付のうち最も大きい日付を取得するなど)。デフォルトでは、日付に基づくforループと各日付の最大値を取得するためのlsコマンド。

関連情報