簡単に言うと、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 未満であるかどうかを確認します。