내 질문에 대한 몇 가지 배경 정보를 쓰겠습니다.
A, B, C의 세 가지 연속 단계로 파일을 생성하는 매일 실행되는 프로세스를 처리해야 합니다. A단계와 C단계의 파일은 하나의 폴더(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단계의 모든 파일에는 단 한 가지 공통점이 있습니다.항상 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'
질문은 다음과 같습니다.
날짜를 지정하지 않고 두 시간 사이에 파일을 찾기 위해 find를 사용할 수 있습니까?
그렇지 않다면 bash에서 이 작업을 수행하는 간단한 한 줄 방법이 있습니까?
감사해요.
답변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)
편집: 업데이트된 답변