Linux 폴더 내의 날짜와 시간을 기준으로 다음 파일을 정렬하고 오래된 파일을 삭제하고 최신 파일을 유지하는 방법은 무엇입니까?
실제 날짜에 관계없이 최신 날짜를 유지하고 싶습니다. 최신 파일이 1년이 지난 파일이라도 상관없으니 그냥 보관하고 싶습니다.
aa_zz_yuyubc_207_dc_ghgh.brr.01_30_2019 3_15_04 am.csv
aa_zz_chuucd.brr.04_30_2020 7_15_12 pm.csv
aa_zz_ddetr_354_m.brr.5_25_2021 03_28_00 am.csv
aa_zz_xyf.brr.6_05_2021 5_20_55 PM.csv
예상 결과: 만 aa_zz_xyf.brr.6_05_2021 5_20_55 PM.csv
:
날짜는 <month>_<day>_<year> <hour>_<minute>_<second> am/pm
12시간 형식입니다.
감사해요
답변1
이를 통해 zsh
다음을 수행할 수 있습니다.
zmodload zsh/datetime
echo rm -f -- *.brr.*.csv(nOe['
LC_ALL=C strftime -rs REPLY "%m_%d_%Y %I_%M_%S %p" ${${REPLY:r}##*.brr.}
'][2,-1])
( echo
괜찮아 보이면 삭제하세요(모의 실행을 위해))
zsh
역 정렬을 위해 glob 한정자를 사용합니다 Oe
(수도 O
), n
코드에서 반환된 값을 기반으로 수치적으로(사용).$REPLY
[...]
이 코드는 strftime -r
( strftime
실제로는 반대 strptime
)를 사용하여 파일 이름의 타임스탬프를 초 단위의 에포크 시간으로 변환합니다. 그런 다음 우리가 해야 할 일은 마지막에서 두 번째 ( ) 만 선택하여 [2,-1]
통과하고 rm
최신 타임스탬프가 있는 항목만 남겨두는 것입니다.
답변2
find 명령에서 xtime 기능을 사용하십시오.
접속시간 생성시간 수정시간
예
find toto/ -name "*csv" -mtime +90 -exec rm {} \;
mtime이 90일을 초과하는 toto/의 파일만 삭제하세요.
날짜가 요구 사항과 일치하는지 여부(파일 이름 대 실제 생성/수정/액세스 날짜)와 관계없이 마지막 파일만 유지하려는 경우
유사한 접근 방식을 사용하여 파일을 격리하여 보관할 수 있습니다.
ls | sort -t_ -k5 -k4 -k3 | tail -1
여기서는 그것의 정반대가 필요합니다
number=$(ls | wc -l) # word cound by line
while read ; do rm "${REPLY}" ; done < <(ls | sort -t_ -k5 -k4 -k3 | head -$(($number - 1)))
예:
/tmp/b$
while read ; do rm "${REPLY}" ; done < <(ls | sort -t_ -k5 -k4 -k3 | head -$(($number - 1)))
/tmp/b$
ls
'aa_zz_ddetr_354_m.brr.5_25_2021 03_28_00 am.csv'
/tmp/b$