저는 다음과 같은 간단한 스크립트를 만들었습니다.
#/bin/bash
DATE=$(date +"%d_%m_%Y-%H:%M:%S")
tar -czvf /kopie/bin-$DATE.tar /bin
DATE=$(date --date="2 hours ago" +"%d-%m-%Y_%H")
rm -f /kopie/bin-$DATE*.tar
스크립트의 마지막 줄에 문제가 있습니다. rm 명령이 작동하지 않고 파일이 삭제되지 않습니다. "2시간 전" 날짜는 잘 작동하므로 문제가 되지 않습니다.
답변1
두 가지 방법으로 파일 이름을 지정하는 것 같습니다.
DATE=$(date --date="2 hours ago" +"%d-%m-%Y_%H")
예를 들어 위에서는 연도와 시간 사이에 _가 있습니다.
그러나 생성한 날짜의 형식은 다음과 같습니다.
DATE=$(date +"%d_%m_%Y-%H:%M:%S")
그러나 이것은 여전히 '연애'의 본질적인 문제를 해결하지 못합니다.다소간2시간 전'은 13:00:00부터 12:59:59까지 1초가 걸리기 때문에 '2017-11-20_13*' 패턴과 일치하지 않습니다.
나는 다음을 사용하는 것을 고려할 것입니다 find
:
find . -name "*.tar" -maxdepth 0 -cmin +120 -delete
2시간보다 오래된 현재 디렉터리의 모든 *.tar 파일은 삭제되어야 합니다(1분의 유예 기간에는 +119 사용). 또한 -delete
이 방법이 작동하는지 테스트할 때 생략할 수도 있습니다.
답변2
문제는 $DATE
마지막 줄의 변수 확장에 있다고 생각합니다. 이를 테스트하려면 echo
명령을 앞에 추가 rm
하고 스크립트를 실행하거나 명령 ${DATE}
대신 $DATE
에 를 사용하여 rm
문제를 예방할 수 있습니다.
문제는 두 개의 서로 다른 날짜 출력 형식을 지정하는 것처럼 존재하지 않는 파일 이름을 삭제하려고 한다는 것일 수도 있으며 tar 파일 생성과 두 번째 이후 삭제 사이에 날짜 형식이 일치해야 한다고 가정합니다. 시간.