/home/abdul/backup
過去1年間のファイルを含むフォルダがあるとします.gz
。私の要件は、過去7日間のサイズを取得することです...
答え1
find /home/abdul/backup -daystart -name '*.gz' -mtime -7 -exec du -h '{}' ';'
仕組み:
find
- コメントに書かれた内容が記載されています。使用しているOSを指定していないため、GNU findにアクセスできるとします。
/home/abdul/backup
- 起動ディレクトリ
-daystart
- 1日を開始してからの時間を測定します(必要な結果であってもなくてもよい)。
-name '*.gz'
- 名前が.gz
(またはより正確にはmatch)で終わるファイルのみを考慮します。*.gz
-mtime -7
- ファイルの最後の修正時間7*24時間、-daystartを考慮
-exec du -h '{}' ';'
-du
人間が読める単位で指定されたファイルサイズの印刷を実行します({}
そのファイル名に展開されます)。
削除されたすべてのファイルが一覧表示されます。修正済み去る7日以内。実行中の特定のオペレーティングシステムとファイルシステムに応じてファイルが作成された時期を確認できますが、多くの* nixシステムはファイルが元々作成された時期または「生成された」時期を追跡しません。
答え2
find . -ctime -7 | xargs ls -l | awk '{ TOTAL += $5;} END{print TOTAL;}'
これにより、現在のディレクトリから7 * 24時間以内に作成されたファイルが最初に一覧表示され、そのファイルのサイズをバイト単位でインポートして要約し、結果を提供します。
答え3
ファイル名にスペースやその他の奇妙な文字が含まれていない場合は、次のようにできます。
du -sch "$(find /home/abdul/backup -name '*.gz' -mtime +7) "
スペースやその他の奇妙な文字の場合は、次を使用します。
find /home/abdul/backup -name '*.gz' -mtime -7 -print0 | xargs -0 du -sch
お持ちの場合たくさん上記の両方のコマンドは、基準に一致するファイルに対して失敗します。 1つ目はファイルのリストが長すぎるため、2つ目は複数のコマンドxargs
に分割され、各サブセットの合計を返すためです。
これらの問題を回避するための別の解決策は次のとおりです(Paulo Almeidaに感謝します)。コメント言う):
find /home/abdul/backup -name '*.gz' -mtime -7 -print0 | du -sch --files0-from -
からman du
:
--files0-from=F
summarize disk usage of the NUL-terminated
file names specified in file F; If F is - then
read names from standard input