私の質問に関するいくつかの背景情報を書きます。
A、B、Cの3つの連続したステップでファイルを生成する毎日実行されるプロセスを処理する必要があります。ステップAとステップCのファイルは1つのフォルダ(X)に保存され、ステップBのファイルは別のフォルダ(YES)に保存されます。プロセスが完了すると、両方のフォルダが別のコンピュータにバックアップされます(これに対する制御権限はありません)。フォルダXの内容は次のとおりです。
t_11254an_luvo251n_B.bak # A 'last modified at Feb 8 20:00'
t_11254aw_n7uo455w_B.bak # C 'last modified at Feb 8 20:24'
t_11254av_j5ux8n2s_B.bak # C 'last modified at Feb 8 20:25'
t_11254as_lvuo4e1j_B.bak # A 'last modified at Feb 9 19:12'
t_11254at_m0uo4525_B.bak # A 'last modified at Feb 9 19:12'
t_11254ak_m2uo4e1j_B.bak # A 'last modified at Feb 9 19:12'
t_11254am_m1uo4e1j_B.bak # A 'last modified at Feb 9 19:12'
t_11254am_m4uo4e4e_B.bak # A 'last modified at Feb 9 19:13'
t_11254am_nauo4nhj_B.bak # C 'last modified at Feb 9 21:54'
t_11254ai_n9uo4njs_B.bak # C 'last modified at Feb 9 21:54'
t_11254ah_n7uo4nvw_B.bak # C 'last modified at Feb 9 21:54'
t_11254aj_n8uo4njs_B.bak # C 'last modified at Feb 9 21:54'
t_11254ak_ncuo71pv_B.bak # A 'last modified at Feb 10 19:01'
t_11254ak_nduo7148_B.bak # A 'last modified at Feb 10 19:01'
t_11254ay_nguo72t2_B.bak # A 'last modified at Feb 10 19:03'
t_11254am_niuo71t5_B.bak # A 'last modified at Feb 10 19:03'
t_11254av_onuo7991_B.bak # C 'last modified at Feb 10 21:08'
t_11254at_omuo79tt_B.bak # C 'last modified at Feb 10 21:08'
t_11254at_okuo7991_B.bak # C 'last modified at Feb 10 21:08'
Cステップのすべてのファイルには1つの共通点があります。常に20:15以降に作成されます。。そのファイルの名前とサイズは、手順Aで生成されたファイルとは異なります。
プロセスはフォルダXのすべてのファイルの削除を開始する前にスクリプトを実行していますが、回復を高速化するために、Cステップで生成されたファイルを一日中維持したいと思います。私が探している最終結果は次のとおりです。
t_11254aw_n7uo455w_B.bak # C 'last modified at Feb 8 20:24'
t_11254av_j5ux8n2s_B.bak # C 'last modified at Feb 8 20:25'
t_11254am_nauo4nhj_B.bak # C 'last modified at Feb 9 21:54'
t_11254ai_n9uo4njs_B.bak # C 'last modified at Feb 9 21:54'
t_11254ah_n7uo4nvw_B.bak # C 'last modified at Feb 9 21:54'
t_11254aj_n8uo4njs_B.bak # C 'last modified at Feb 9 21:54'
t_11254av_onuo7991_B.bak # C 'last modified at Feb 10 21:08'
t_11254at_omuo79tt_B.bak # C 'last modified at Feb 10 21:08'
t_11254at_okuo7991_B.bak # C 'last modified at Feb 10 21:08'
質問は次のとおりです。
日付を指定せずに2時間の間にファイルを見つけるためにfindを使用できますか?
そうでなければ、bashでこれを行う簡単な1行の方法はありますか?
ありがとうございます。
答え1
Jetchiselの答えのおかげで解決策を見つけました。
#!/bin/bash
for file in /folder/X/*.bak; do
MODIFIED_DATE=$(stat --format="%y" $file | awk '{print $2}')
if [[ $MODIFIED_DATE < '20:15' ]]; then
printf 'rm -rf %s\n' "$file"
fi
done
stat --format="%y"
最後に変更された日付をこの形式で表示します2020-02-02 19:11:34.000000000 +0100
。私はawkを使って時間を選びます。これは、ファイルが20:15より前に作成されたことを確認して削除できるようにするために必要な情報です。きちんとした記述ではありませんが、少なくとも動作します:).
答え2
20:00
ファイルがとの間にあるbashの方法22:00
#!/usr/bin/env bash
for f in /folder/x/*.bak; do
var=$(date -r "$f" '+%H:%M')
if [[ $var > '20:00' && $var < '22:00' ]]; then
echo "$f"
fi
done
- 上記のコードはファイルと一致する必要があります。
[[ $var < '20:15' ]]
ただ「それがあなたが求めているものなら」に変えてください。- この構文は次のよう
date
に機能します。GNU
BSD
date(1)
編集:更新された回答