過去3日間に作成されたディレクトリを一覧表示し、スペース使用量を表示します。

過去3日間に作成されたディレクトリを一覧表示し、スペース使用量を表示します。

ディスクのクリーンアップの一環として、今月3日(現在の営業日ではない)に作成されたすべてのフォルダとそのコンテンツを削除する必要があります。

はい - 今日の日付が20191121の場合は、次のようになります。

/opt/png/wsm/data/workdir/batch/*20191120*
/opt/png/wsm/data/workdir/batch/*20191119*
/opt/png/wsm/data/workdir/batch/*20191118*

今私ができることはリストを得ることです。

ls -d */ | grep 20191118 (and then 19 and 20)

特定の日付にフォルダとその内容を削除して、どのくらいのサイズを保存できるかを確認する方法は?

サーバーのbashバージョンは次のとおりです。

bash-3.2$ bash --version
GNU bash, version 3.2.57(1)-release (i386-pc-solaris2.10)
Copyright (C) 2007 Free Software Foundation, Inc.

答え1

ファイルとフォルダをクリーンアップするときにこのコマンドを使用する必要がありますdu

duドライブスペースの使用量を一覧表示します。--time選択の余地がある、そして利用可能ですディレクトリにのみ適用。それらを結合しなさい:

du -h */ --time | grep -E '2019\-09\-(18|19|20)'

これは、11月18日、19日、または20日にコンテンツが最後に作成または変更されたすべてのサブディレクトリを検索します。サイズ(-h人が読める)、変更日、最後にパスが出力されます。

答え2

rm したいディレクトリに 5000 個以上のファイルが含まれている場合、以前の回答は失敗します。これにより、削除されていない古いディレクトリが残ります。

呼び出しごとに最大5000の引数を使用してrmを1回以上呼び出す「-exec rm {} \ +」の代わりにfindを使用します。

変更されたファイル/ディレクトリを検索するには、findを使用します。

find . -type d -atime n  # for exact number of days
find . -type d -atime +n  # for greater than n days

-daystartオプションを追加すると、24時間前ではなく、今日から時間を測定できます。

次に、「-exec rm{}\+」を使用して削除するか、「-exec du -sh{}\;」を使用して各ディレクトリのディスク使用量を取得します。

また、検索を最上位ディレクトリに制限するには、find+du 呼び出しの -maxlength オプションを検討してください。

詳細については、「man find」を参照してください(ターミナルから(なるべく))、またはman7.orgから最新のマニュアルページを入手してください。http://man7.org/linux/man-pages/man1/find.1.htmlしかし、Die.netではそうではありません(ページタイムスタンプも削除したため、マニュアルページが古くなったか期限切れになったかどうかはわかりません)。

答え3

その後、@Kusalanandaのソリューションをより短く(私の観点から見ると)、より読みやすい構文を提供し、gdateの代わりに日付を使用します(gdateはSolarisでは日付と同じかもしれませんが)。

days=$(echo -e "1 day ago \n 2 days ago \n 3 days ago" | date -f - +'%Y%m%d')
dpath="/opt/png/wsm/data/workdir/batch"
for day in $days ; do
    du -s -h "$dpath/$day"
    rm -r -f "$dpath/$day"
done

答え4

Solarisシステムにzshがある場合は、bash通常zshもあります。

<start-end>この日付形式は数値のようにソートされているため、zshの10進数範囲のグローバル演算子を使用できます。

zsh -c '
  zmodload zsh/datetime
  now=$EPOCHSECONDS day=$(( 24 * 60 * 60 ))
  for var t (start $(( now - 3*day )) end $(( now - 1*day )) )
    strftime -s $var %Y%m%d $t
  range="<$start-$end>"
  rm -rf -- *$~range*(/)
'

夏時間が切り替わる夜中に実行している場合は、現在の時刻から24 * 60 * 60秒を減算すると、同じ日または2日前に実行できます。

cこれらのディレクトリの累積ディスク使用量を取得するには、削除後に回収されるスペースの量は、そのディレクトリ内のファイルが別の場所にハードリンクを持っているかどうかによって異なりますrm -rfdu -c

関連情報