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

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

簡単に言うと、Linux にタグを付けたとすると、stat が表示されます。 ファイルの変更時刻を抽出するコマンドと、GNU date 指定された時刻から時間を抽出するコマンド:

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 つの部分で構成されています。変数には、コマンド置換の結果が割り当てられます。コマンドは裏返しに読む必要があります:

<オール>
  • $(stat -c %Y "$1") -- この (2 番目の) コマンド置換は stat を呼び出します $1 で 埋め込まれたシェル スクリプトのパラメータ。 $1 find によって割り当てられました 見つかったパス名の 1 つとして。 stat の %Y オプション コマンドは、エポックからの秒数で変更時間を返します。
  • date -d @ ... +%-H -- これは、上記のコマンド置換からエポックからの秒数を取得し、date を要求します。 その時間の時間部分を提供します。 @ 構文は date を示します 入力形式としてエポックからの秒数を指定していること。 - で オプションを日付出力形式で指定すると、GNU 日付に not を指定します 先行ゼロで値を埋めます。これにより、後で8進数の誤解を防ぐことができます。
  • $h を取得したら Hour 変数が割り当てられ、bash の条件演算子 [[ を使用します その値が 11 以上であり、厳密には 15 未満であるかどうかを確認します。


    Linux
    1. 2つのタイムスタンプ間のログを抽出する方法は?

    2. 2つのリモート間でファイルをRsyncする方法は?

    3. Lsのある日付の後に作成されたファイルのみを取得するにはどうすればよいですか?

    1. bashで2つの日付の違いを取得するにはどうすればよいですか

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

    3. 日付範囲内で作成されたファイルを検索

    1. Linuxで2つのテキストファイルを結合する方法

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

    3. .fuse_hidden* ファイルを削除するには?