duコマンドでファイルのみでサイズとタイムスタンプを表示

ディレクトリー内にあるファイルをサイズとタイムスタンプを一覧に出す方法です。

適当なファイル作成

動作確認用に適当なファイルをランダムなサイズで用意します。

$ for i in {01..09}; do dd if=/dev/urandom of=/work/file${i} bs=1M count=$((RANDOM % 50 + 1)) status=none; done
$ ls -l /work/file??
-rw-r--r--. 1 takam takam 49283072 Jul 18 17:01 /work/file01
-rw-r--r--. 1 takam takam 51380224 Jul 18 17:01 /work/file02
-rw-r--r--. 1 takam takam 52428800 Jul 18 17:01 /work/file03
-rw-r--r--. 1 takam takam 11534336 Jul 18 17:01 /work/file04
-rw-r--r--. 1 takam takam 38797312 Jul 18 17:01 /work/file05
-rw-r--r--. 1 takam takam  1048576 Jul 18 17:01 /work/file06
-rw-r--r--. 1 takam takam 38797312 Jul 18 17:01 /work/file07
-rw-r--r--. 1 takam takam 15728640 Jul 18 17:01 /work/file08
-rw-r--r--. 1 takam takam 30408704 Jul 18 17:01 /work/file09
count=$((RANDOM % 50 + 1))の説明

countは、ddコマンドのオプションで、書き込むブロック数を指定します。
ここでは、$((RANDOM % 50 + 1))により、Bashの組み込み変数「RANDOM」を使って1~50のランダムな整数を生成し、その値をcountに設定しています。

項目説明
count=ddコマンドのオプション。書き込むブロック数を指定する。
$((...))シェルの算術展開。括弧内の計算結果をcountに設定する。
RANDOMBashの組み込み変数。0~32767のランダムな整数を返す。
RANDOM % 5050で割った余りを求め、0~49の値にする。
+ 11を加えて、1~50の範囲にする。

RANDOM = 12345 ・・・ 組み込み変数RANDOMの値が「12345」
12345 % 50 = 45 ・・・ 「12345」を「50」で割ると余りが「45」
45 + 1 = 46 ・・・ 「45」に「1」を足して「46」※ count=0になるのを防ぐため
count=46 ・・・ ddコマンドのブロック数は「46」

ファイルのみでサイズとタイムスタンプを表示

$ find /work -type f -exec du -b --time {} + | column -t ・・・ 列を揃えて表示
49283072  2026-07-18  17:01  /work/file01
51380224  2026-07-18  17:01  /work/file02
52428800  2026-07-18  17:01  /work/file03
11534336  2026-07-18  17:01  /work/file04
38797312  2026-07-18  17:01  /work/file05
1048576   2026-07-18  17:01  /work/file06
38797312  2026-07-18  17:01  /work/file07
15728640  2026-07-18  17:01  /work/file08
30408704  2026-07-18  17:01  /work/file09
$ find /work -type f -exec du -b --time {} + | awk '{printf "%15d  %s %s  %s\n", $1, $2, $3, $4}' ・・・ サイズを右揃え
       49283072  2026-07-18 17:01  /work/file01
       51380224  2026-07-18 17:01  /work/file02
       52428800  2026-07-18 17:01  /work/file03
       11534336  2026-07-18 17:01  /work/file04
       38797312  2026-07-18 17:01  /work/file05
        1048576  2026-07-18 17:01  /work/file06
       38797312  2026-07-18 17:01  /work/file07
       15728640  2026-07-18 17:01  /work/file08
       30408704  2026-07-18 17:01  /work/file09
$ find /work -type f -exec du -b --time {} + | awk '{printf "%9d  %s %s %s\n", $1, $2, $3, $4}' | sort -r | head -5
 52428800  2026-07-18 17:01 /work/file03
 51380224  2026-07-18 17:01 /work/file02
 49283072  2026-07-18 17:01 /work/file01
 38797312  2026-07-18 17:01 /work/file07
 38797312  2026-07-18 17:01 /work/file05

サブディレクトリーの階層の深さを指定するには「-maxdepth」を使います。

$ find /work -type f -exec du -b --time {} + | awk '{printf "%9d  %s %s %s\n", $1, $2, $3, $4}'
 49283072  2026-07-18 17:01 /work/file01
 51380224  2026-07-18 17:01 /work/file02
 52428800  2026-07-18 17:01 /work/file03
 11534336  2026-07-18 17:01 /work/file04
 38797312  2026-07-18 17:01 /work/file05
  1048576  2026-07-18 17:01 /work/file06
 38797312  2026-07-18 17:01 /work/file07
 15728640  2026-07-18 17:01 /work/file08
 30408704  2026-07-18 17:01 /work/file09
 14680064  2026-07-18 21:08 /work/subdir1/file01
 20971520  2026-07-18 21:08 /work/subdir1/file02
  1048576  2026-07-18 21:08 /work/subdir1/file03
 46137344  2026-07-18 21:08 /work/subdir1/file04
 37748736  2026-07-18 21:08 /work/subdir1/file05
 32505856  2026-07-18 21:08 /work/subdir1/file06
  4194304  2026-07-18 21:08 /work/subdir1/file07
 15728640  2026-07-18 21:08 /work/subdir1/file08
 27262976  2026-07-18 21:08 /work/subdir1/file09
 26214400  2026-07-18 21:11 /work/subdir1/subdir2/file01
 34603008  2026-07-18 21:11 /work/subdir1/subdir2/file02
  3145728  2026-07-18 21:11 /work/subdir1/subdir2/file03
 17825792  2026-07-18 21:11 /work/subdir1/subdir2/file04
 51380224  2026-07-18 21:11 /work/subdir1/subdir2/file05
  8388608  2026-07-18 21:11 /work/subdir1/subdir2/file06
 46137344  2026-07-18 21:11 /work/subdir1/subdir2/file07
 16777216  2026-07-18 21:11 /work/subdir1/subdir2/file08
 16777216  2026-07-18 21:11 /work/subdir1/subdir2/file09
$ find /work -maxdepth 2 -type f -exec du -b --time {} + | awk '{printf "%9d  %s %s %s\n", $1, $2, $3, $4}'
 49283072  2026-07-18 17:01 /work/file01
 51380224  2026-07-18 17:01 /work/file02
 52428800  2026-07-18 17:01 /work/file03
 11534336  2026-07-18 17:01 /work/file04
 38797312  2026-07-18 17:01 /work/file05
  1048576  2026-07-18 17:01 /work/file06
 38797312  2026-07-18 17:01 /work/file07
 15728640  2026-07-18 17:01 /work/file08
 30408704  2026-07-18 17:01 /work/file09
 14680064  2026-07-18 21:08 /work/subdir1/file01
 20971520  2026-07-18 21:08 /work/subdir1/file02
  1048576  2026-07-18 21:08 /work/subdir1/file03
 46137344  2026-07-18 21:08 /work/subdir1/file04
 37748736  2026-07-18 21:08 /work/subdir1/file05
 32505856  2026-07-18 21:08 /work/subdir1/file06
  4194304  2026-07-18 21:08 /work/subdir1/file07
 15728640  2026-07-18 21:08 /work/subdir1/file08
 27262976  2026-07-18 21:08 /work/subdir1/file09

タイトルとURLをコピーしました