
나는 다음과 같은 간단한 스크립트를 만들었습니다.
#/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 생성 사이에서 일치해야 한다고 가정하기 때문입니다. 파일을 삭제하고 2시간 후에 삭제합니다.