バックアップデータベース用のフォルダがあり、日付に関係なく午前11時から午後3時の間に作成されたすべてのバックアップを削除したいと思います。それが問題です!
このコマンドは非常に便利だと思いますが、私のユースケースでは機能しません。
find . -type f -newermt '01 nov 2018 00:00:00' -not -newermt '10 nov 2018 00:00:00' -delete
しかし、ここでは2つの日付の間に間隔を置くように強制します!特定の2時間の間に作成されたバックアップのみを削除したいと思います。
ベストアンサー1
タグ付けしたので簡単です。オペレーティングシステムstat
、ファイルの修正時間を抽出するコマンド、および指定されたdate
時間から時間を抽出するGNUコマンドを使用できます。
find . -type f -exec sh -c '
h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' \
sh {} \; -ls
結果が正確に見える場合は、次の操作を行います。
find . -type f -exec sh -c '
h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' \
sh {} \; -delete
このバージョンのテスト実行は次のとおりです-ls
。
$ touch -d 'Wed Sep 12 11:00:01 EDT 2018' 11am
$ touch -d 'Wed Sep 12 12:00:02 EDT 2018' 12pm
$ touch -d 'Wed Sep 12 15:00:03 EDT 2018' 303pm
$ find . -type f -exec sh -c 'h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' sh {} \; -ls
1705096 0 -rw-r--r-- 1 user group 0 Sep 12 2018 ./11am
1705097 0 -rw-r--r-- 1 user group 0 Sep 12 2018 ./12pm
私がフォローしてきた素晴らしい答えを書いてくれたKusalalanandaに感謝します。「find」の-execオプションについて
しているので参考にしてくださいいいえ時間範囲に一致するファイルのみを削除できるようにファイルごとに結果が必要なので、ここに{} +
バージョンが必要です。find
-exec
組み込みのシェルスクリプトには、ファイルの「タイム」タイムスタンプを決定し、範囲に応じて成功または失敗を返す2つの主要な部分があります。最初の部分自体は2つの部分で完了します。この変数にはコマンド置換結果が割り当てられます。コマンドは内側から外側に読み取る必要があります。
$(stat -c %Y "$1")
- この(2番目の)コマンドは呼び出しを置き換えます。stat
見つかったパス名の1つで指定された組み込みシェルスクリプトの$1
引数。このコマンドの%Yオプションは、エポック以降の修正時間を秒単位で返します。$1
find
stat
date -d @ ... +%-H
- 上記のコマンド置換でエポック以降の秒数を取得し、date
その時間の時間部分を指定するように要求します。@
通事論date
入力形式でepochの後に数秒かかります。-
日付出力形式のオプションを使用して、日付をGNUに通知します。いいえ値を前にゼロで埋めます。これにより、将来の8進数の誤解を防ぐことができます。
$h
Hour 変数を割り当てた後、bash の条件付き演算子を使用して、[[
値が 11 以上、15 より小さいかどうかを尋ねます。