bash 스크립트를 통해 폴더의 파일을 제거하지 않는 것을 찾으십시오.

bash 스크립트를 통해 폴더의 파일을 제거하지 않는 것을 찾으십시오.

저는 bash 스크립팅을 처음 접했고 우분투의 find 메소드에 푹 빠져 있습니다. 폴더에서 /opt/모든 폴더를 검색하여 특정 날짜보다 오래된지 확인하고 싶습니다. 오래된 파일이라면 이 폴더에 있는 파일을 제거해야 합니다(실제로는 폴더 자체도 마찬가지입니다). 날짜가 아직 너무 새로운 경우에는 파일을 건드리지 말아야 합니다.

코드에 있는 것:

find $BACKUP_DIR -maxdepth 1 -mtime +$DAYS_TO_KEEP -name "*$mystring" -exec rm -rf '{}' ';'

변수에는 다음 값이 포함됩니다.

BACKUP_DIR=/opt/
TESTDIR=2014-11-25-daily_testmachine
mystring=-daily_testmachine

변수가 $DAYS_TO_KEEP2인 경우 날짜는 2014-11-25이고 폴더 이름은 2014-11-20-daily_testmachine폴더이므로 해당 내용을 삭제해야 합니다.

find가 제거할 파일과 폴더를 제거/찾지 못하는 내가 뭘 잘못하고 있나요? 오류를 찾을 수 없는 것 같습니다.

메모:폴더의 정확한 문자열 이름으로 명령을 실행하면 폴더가 삭제됩니다. 그래서 형식이나 이름에 문제가 있습니다.

find $BACKUP_DIR -maxdepth 1 -name "2014-11-20-daily_testmachine" -exec rm -rf '{}' ';'

더 명확하게 하기 위해 설정을 보여주는 스크린샷을 만들었습니다.

답변1

내 오류는 -mtime. 내 스크립트가 이름을 확인하고 있다고 생각했지만 -mtime파일이 생성된 날짜를 확인했습니다. 그래서 내 최종 코드는 다음과 같습니다.

DAYS_TO_KEEP=2
find $BACKUP_DIR -maxdepth 1 -mtime +"$DAYS_TO_KEEP" -exec rm -rf {} \;

sudo touch -d "3 days ago" /filepath/folderToRemove난 그냥 만들기 위해 ~을 해야 했어-mname폴더를 찾기그리고파일이 제거될 수 있을 만큼 오래되었는지 확인하세요. 따라서 이 최종 코드는 내 변수보다 오래된 모든 폴더를 제거합니다.$DAYS_TO_KEEP

관련 정보