GNU/Linux >> Linux の 問題 >  >> Linux

Linux – 2回の間に作成されたファイルを削除する方法は?

データベースをバックアップするフォルダがあり、午前11時から午後3時の間に作成されたすべてのバックアップを削除したいのですが、それが何日であるかは関係ありません。これが問題です。

このコマンドは非常に役立つことがわかりましたが、私のユースケースではそうではありませんでした:

find . -type f -newermt '01 nov 2018 00:00:00' -not -newermt '10 nov 2018 00:00:00' -delete

しかし、ここでは、2つの日付の間の間隔を強制されます!特定の2つの時間の間に作成されたバックアップのみを削除したい。

承認された回答:

簡単に言うと、Linuxにタグを付けた場合、statがあります。 ファイルの変更時刻とGNUdateを抽出するコマンドを使用できます コマンド。指定された時間から時間を抽出します:

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

私が従った優れた答えを書いたKusalanandaの功績: `find`

の-execオプションを理解する

しないことに注意してください {} +が必要 findのバージョン ここでは、-execが必要です。 結果はファイルごとになるため、時間範囲に一致するファイルのみを削除します。

埋め込まれたシェルスクリプトには2つの主要な部分があります。ファイルの「時間」タイムスタンプを決定し、範囲に基づいて成功または失敗を返します。最初の部分はそれ自体が2つの部分で達成されます。変数には、コマンド置換の結果が割り当てられます。コマンドは裏返しに読む必要があります:

  1. $(stat -c %Y "$1") —この(2番目の)コマンド置換はstatを呼び出します $1で 埋め込まれたシェルスクリプトのパラメータ。 $1 findによって割り当てられました 見つかったパス名の1つとして。 statの%Yオプション コマンドは、エポック以降の変更時間を秒単位で返します。
  2. date -d @ ... +%-H —これは、上記のコマンド置換からエポックから数秒かかり、dateに問い合わせます。 その時間の時間の部分を私たちに与えるために; @ 構文はdateに指示します 入力形式として、エポックからの秒数を指定しています。 -を使用 日付出力形式のオプションでは、GNUの日付をしないように指示します。 値に先行ゼロを埋め込みます。これにより、後で8進数の誤解を防ぐことができます。
関連:Debian Lenny:SplashyをGrub2の直後に開始したいですか?

$hを取得したら 時間変数が割り当てられ、bashの条件演算子[[を使用します その値が11以上であり、厳密に15未満であるかどうかを尋ねます。


Linux
  1. ncおよびpvコマンドを使用して2台のコンピューター間でファイルを転送する方法

  2. Linuxで巨大な(100-200GB)ファイルを削除する方法

  3. LinuxでX日より古いすべてのファイルを削除するにはどうすればよいですか?

  1. Linuxでファイルの名前を変更する方法

  2. Linuxでコマンドラインからファイルとディレクトリを削除する方法

  3. Linuxで特定のサイズのファイルを作成する方法

  1. Linuxコマンドラインで特定の拡張子を持つファイルを削除する方法

  2. Linuxで2つのファイルの違い(追加のみ)を取得する方法

  3. Linuxで特定の日付より古いファイルを削除するにはどうすればよいですか?