특정 날짜보다 오래된 파일의 줄 유지

특정 날짜보다 오래된 파일의 줄 유지

다음 파일이 있습니다(이것이 모든 스냅샷을 나열하는 출력이라고 생각할 수도 있음 zfs list).

zpzetta/sys/win2012@zfs-auto-snap_daily-2021-03-01-0525   Mon Mar  1  5:25 2021
zpzetta/sys/win2012@zfs-auto-snap_monthly-2021-03-01-0552 Mon Mar  1  5:52 2021
zpzetta/sys/win2012@zfs-auto-snap_daily-2021-03-02-0525   Tue Mar  2  5:25 2021
zpzetta/sys/win2012@zfs-auto-snap_hourly-2021-03-02-2117  Tue Mar  2 21:17 2021
zpzetta/sys/win2012@zfs-auto-snap_hourly-2021-03-02-2217  Tue Mar  2 22:17 2021
zpzetta/sys/win2012@zfs-auto-snap_hourly-2021-03-02-2317  Tue Mar  2 23:17 2021
zpzetta/sys/win2012@zfs-auto-snap_hourly-2021-03-03-0017  Wed Mar  3  0:17 2021
zpzetta/sys/win2012@zfs-auto-snap_hourly-2021-03-03-0117  Wed Mar  3  1:17 2021
zpzetta/sys/win2012@zfs-auto-snap_hourly-2021-03-03-0217  Wed Mar  3  2:17 2021
zpzetta/sys/win2012@zfs-auto-snap_hourly-2021-03-03-0317  Wed Mar  3  3:17 2021
zpzetta/sys/win2012@zfs-auto-snap_hourly-2021-03-03-0417  Wed Mar  3  4:17 2021

특정 날짜보다 오래된 스냅샷(행 유지)을 삭제하고 싶습니다. 예를 들어 3월 3일보다 오래된 모든 것을 삭제하고 싶습니다.

나는 다음과 같은 일을 할 수 있다는 것을 알고 있습니다.

ts=`...` # put in time stamp to compare here
for line in `zfs list -H -rt snap -o name,creation zpzetta`
do
  date=`echo $line | awk '{print $2,$3,$4,$5,$6,$7,$8}'`
  secs=`date --date='$date' +'%s'`
  if [ "$secs" -lt $ts ]
  then
    echo $line
  fi
done

하지만 내가 보기에는 더러워 보인다.

이 작업을 수행하는 더 우아한 방법이 없습니까? (쉘 스크립트로는 Python, Perl 등이 없습니다.)

답변1

나는 이것이 가능하다고 생각합니다. 날짜를 비교하지 않고 약식 월 이름과 날짜 및 연도의 숫자를 활용합니다.

$ sed -n '/Mar *[3-9].*2021\|Mar *[1-3][0-9].*2021$/p' foo.foo 
zpzetta/sys/win2012@zfs-auto-snap_hourly-2021-03-03-0017  Wed Mar  3  0:17 2021
zpzetta/sys/win2012@zfs-auto-snap_hourly-2021-03-03-0117  Wed Mar  3  1:17 2021
zpzetta/sys/win2012@zfs-auto-snap_hourly-2021-03-03-0217  Wed Mar  3  2:17 2021
zpzetta/sys/win2012@zfs-auto-snap_hourly-2021-03-03-0317  Wed Mar  3  3:17 2021
zpzetta/sys/win2012@zfs-auto-snap_hourly-2021-03-03-0417  Wed Mar  3  4:17 2021

추가 매개변수가 필요한 경우 모드를 변경하면 됩니다. 예를 들어 2020년 11월 4일보다 오래된 행을 검색합니다.

sed-n'/십일월*[4-9].*2020\|십일월*[1-3][0-9].*2020$/p' foo.foo 

관련 정보