検索コマンドを使用して検索されたファイルの合計サイズを計算する方法

検索コマンドを使用して検索されたファイルの合計サイズを計算する方法

まず、2012年12月のファイルのみを表示するFINDコマンドを使用してファイルを検索する必要がありました。

2番目に検索されたファイルの合計サイズを確認する必要があります。

このコマンドを使用しました

find /storage/backup/rman/ -mtime +90 -mtime -120 -exec ls -lrth {} \;

しかし、私が望んでいない11月のファイルも提供されます。

-rw-r--r-- 1 oraprod dba 8.7K Dec  1 22:40 /storage/backup/rman/full_011212.log
-rw-r----- 1 oraprod dba 3.3G Dec 11 22:34 /storage/backup/rman/BKPPROD_aknskgvb.F_bkp
-rw-r----- 1 oraprod dba 34M Dec  1 22:40 /storage/backup/rman/ctrl_011223
-rw-r----- 1 oraprod dba 1.3M Dec  1 22:33 /storage/backup/rman/BKPPROD_8lnrq765.F_bkp
-rw-r--r-- 1 oraprod dba 8.0K Dec 20 22:45 /storage/backup/rman/full_201212.log
-rw-r----- 1 oraprod dba 34M Dec  2 22:42 /storage/backup/rman/ctrl_021223
-rw-r----- 1 oraprod dba 2.5G Dec 11 22:38 /storage/backup/rman/BKPPROD_ajnskgvb.F_bkp
-rw-r----- 1 oraprod dba 34M Dec 13 22:46 /storage/backup/rman/ctrl_131223
-rw-r--r-- 1 oraprod dba 8.0K Dec 17 22:44 /storage/backup/rman/full_171212.log
-rw-r--r-- 1 oraprod dba 8.0K Dec 10 22:38 /storage/backup/rman/full_101212.log
-rw-r--r-- 1 oraprod dba 8.0K Dec 13 22:46 /storage/backup/rman/full_131212.log
-rw-r--r-- 1 oraprod dba 1.4K Nov 30 22:00 /storage/backup/rman/full_301112.log
-rw-r----- 1 oraprod dba 34M Dec  8 22:46 /storage/backup/rman/ctrl_081223
-rw-r--r-- 1 oraprod dba 9.2K Dec 12 22:43 /storage/backup/rman/full_121212.log

コマンドの最後に渡すと、du -ch結果は次のようになります。

8.0K    ./.gnome/gnome-vfs
12K     ./.gnome
24K     ./lsat-0.9.7.1/changelog
920K    ./lsat-0.9.7.1
8.0K    ./.gconf/desktop/gnome/accessibility/keyboard
12K     ./.gconf/desktop/gnome/accessibility
8.0K    ./.gconf/desktop/gnome/peripherals/keyboard/host-mdfr-prod/0
12K     ./.gconf/desktop/gnome/peripherals/keyboard/host-mdfr-prod
16K     ./.gconf/desktop/gnome/peripherals/keyboard
20K     ./.gconf/desktop/gnome/peripherals
36K     ./.gconf/desktop/gnome
40K     ./.gconf/desktop
8.0K    ./.gconf/apps/panel/applets/clock/prefs
12K     ./.gconf/apps/panel/applets/clock
8.0K    ./.gconf/apps/panel/applets/workspace_switcher/prefs
12K     ./.gconf/apps/panel/applets/workspace_switcher
8.0K    ./.gconf/apps/panel/applets/window_list/prefs
12K     ./.gconf/apps/panel/applets/window_list
40K     ./.gconf/apps/panel/applets
44K     ./.gconf/apps/panel
8.0K    ./.gconf/apps/puplet
56K     ./.gconf/apps
100K    ./.gconf
8.0K    ./.nautilus/metafiles
12K     ./.nautilus
4.0K    ./.eggcups
196K    ./.gstreamer-0.10
4.0K    ./.redhat/esc
8.0K    ./.redhat
8.0K    ./.gnome2/share/cursor-fonts
8.0K    ./.gnome2/share/fonts
20K     ./.gnome2/share
4.0K    ./.gnome2/keyrings
4.0K    ./.gnome2/accels
4.0K    ./.gnome2/nautilus-scripts
36K     ./.gnome2
12K     ./.metacity/sessions
16K     ./.metacity
4.0K    ./.Trash
4.0K    ./.gnome2_private
68K     ./.gconfd
4.0K    ./.mozilla/extensions
4.0K    ./.mozilla/plugins
12K     ./.mozilla
4.0K    ./Desktop
2.5M    .
2.5M    total

答え1

一部のバージョンfind(含まれていないLinux、Cygwin、OSX、FreeBSD)では、演算子を使用してファイルの変更時刻を参照日と比較できます-newermt

find /storage/backup/rman -newermt '2012-12-01' ! -newermt '2013-01-01'

-mtimeこの演算子はコマンドの実行時間に関連しているため、この演算子を使用して特定の日付にファイルが変更されたかどうかを知ることはできませんfind。演算子がfindない場合は、参照ファイルを作成して演算子を使用します。-newermt-newer

touch -t 201212010000 start
touch -t 201301010000 end
find /storage/backup/rman -newer start ! -newer end

ファイルの合計サイズを取得するには、du -c最後の行(「total」)のみを使用して維持します。ディレクトリを渡すと、duそのディレクトリの下にあるすべてのファイルのサイズが合計されるため、ディレクトリを除外する必要があります。

find /storage/backup/rman -type f -newermt '2012-12-01' ! -newermt '2013-01-01' -exec du -c {} + | tail -n 1

ファイル数が多いと、コマンドラインの長さが長すぎる可能性があるため、複数回実行され、上記のfindコマンドduは最後のバッチの出力のみを一覧表示します。この場合、各実行の金額を合計する必要があります。これを行う1つの方法があります。

find /storage/backup/rman -type f -newermt '2012-12-01' ! -newermt '2013-01-01' \
     -exec sh -c 'du "$@" | tail -n 1' _ {} + |
awk '{total += $1} END {print total}'

演習:次のコマンドの問題は何ですか? (例:一般的ではありませんが、可能な状況で誤った番号を報告することになりますか?)

find /storage/backup/rman -type f -newermt '2012-12-01' ! -newermt '2013-01-01' \
     -exec du {} + |
awk '$2 == "total" {total += $1} END {print total}'

答え2

まず、ファイルサイズをバイト単位で検索し、一緒に追加します。

sed 's/\s\+/+/g' <<<$(find /storage/backup/rman/ -mtime +90 -mtime -120 -exec stat -c "%s" {} \;) | bc

編集する

これらのファイルを表示するには、

du -chs $(find /storage/backup/rman/ -mtime +90 -mtime -120)

答え3

~からhttps://stackoverflow.com/questions/64649/how-do-i-get-the-unix-find-command-to-print-out-the-file-size-with-the-file-name

find . -name '*.ear' -exec ls -lh {} \;

jer.drab.orgの回答で追加情報を確認してください。精神的にMBに変換する時間を節約してください。

関連リソース

答え4

2番目の要求(ファイルサイズの要約)には、次のものがあります。

find /storage/backup/rman/ -mtime +90 -mtime -120 -printf '%s\n' \
 | awk '{total += $1} END {printf "%.17g\n", total}'
  • -printf '%s\n'印刷サイズのみ(GNU実装が必要find
  • awk は数学的計算を実行します。
  • printf "%.17g\n"科学的表記法を避ける

動作していることを確認してください。

fallocate -l 1M ./1m.txt
fallocate -l 2M ./2m.txt
echo $(($(stat -c '%s' ./1m.txt) + $(stat -c '%s' ./2m.txt)))
3145728
find ~/ -name '?m.txt' -printf '%s\n' \
 | awk '{total += $1} END {printf "%.17g\n", total}'
3145728

引用:

関連情報