linux/bash/unix에서 파일 이름과 날짜를 비교하고 30일 후에 삭제합니다.

linux/bash/unix에서 파일 이름과 날짜를 비교하고 30일 후에 삭제합니다.

예를 들어, 날짜가 다른 많은 파일이 포함된 디렉토리가 있고 날짜가 파일 이름과 함께 배치되는 경우입니다. 내 파일 이름 중 하나가 이고 tr_2017-12-05.html파일 날짜가 2017-12-05오늘 날짜보다 30일 이전인 경우 2018-01-10이전 파일을 삭제해야 합니다. Linux 스크립트는 무엇입니까?

답변1

파일 이름에 실제 생성 날짜가 있으면 찾기를 사용하여 삭제하세요.

find /path/ -ctime +30 -exe rm -f {} \;

지난 30일 이내에 생성된 파일은 삭제됩니다.

답변2

이것은 당신에게 도움이 될 것입니다:

#!/bin/bash

directory=./

for file in $(find $directory -maxdepth 1); do
    a='[^0-9]*([[:digit:]]{4}).([[:digit:]]{2}).([[:digit:]]{2})'
    [[ $file =~ $a ]];
    year=${BASH_REMATCH[1]}
    month=${BASH_REMATCH[2]}
    day=${BASH_REMATCH[3]}
    # echo "Year=$year Month=$month Day=$day"
    mydate=$year$month$day
    if [[ $mydate ]]; then
    [[ "$(date -d "$mydate" +'%s')" -gt "$(date -d "30 days ago" +'%s')" ]] && 
    echo rm -i "$file"
    fi
done

파일 목록이 예상과 일치 echo하면 rm.

관련 정보