BASH - rm 명령을 사용하는 간단한 스크립트가 작동하지 않습니다.

BASH - rm 명령을 사용하는 간단한 스크립트가 작동하지 않습니다.

저는 다음과 같은 간단한 스크립트를 만들었습니다.

#/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 파일 생성과 두 번째 이후 삭제 사이에 날짜 형식이 일치해야 한다고 가정합니다. 시간.

관련 정보