2014-05-20 1 views
1

downloads 폴더에서 N 일이 지난 모든 파일을 삭제하지만 archive 하위 폴더의 모든 파일을 제외시키는 bash 스크립트를 만들어야합니다. 내 폴더 구조는 다음과 같다 :N 일 이전에 파일을 삭제했지만 특정 폴더에있는 파일을 제외하는 Bash 스크립트

내가 찾아 N 일보다 오래된 파일 삭제 스크립트를 만들 수 있었다, 그러나 나는 archive 하위 폴더의 모든 파일을 제외 할 this Q&A을 바탕으로
downloads/ 
    user1_folder/ 
     archive/ 
    user2_folder/ 
     archive/ 
    ... 

.

#!/bin/bash 
find ./downloads -mtime +32 -type f -delete 
+0

maxdepth 매개 변수로 재생해야합니다. – klashxx

+0

구체적인 시나리오는 무엇입니까? mtime (최종 수정 시간)을 사용하면 문제가 발생할 수 있습니다. 예를 들어 파일을 다른 위치에서 복사하고 사용자 폴더 중 하나에 추가하면 변경 시간은 업데이트되지만 마지막으로 수정 한 시간은 업데이트되지 않습니다. – Usagi

+0

@ Usagi 나는 cronjob을 가지고 있고 4 주 이상 오래된 다운로드 폴더에있는 모든 파일을 삭제하고 싶다. 그 시간 전에 다운로드 폴더에 의미가 추가되었습니다. 여기에 수정 된 시간이 표시 될 수 있습니다. –

답변

1

시도해야 ! -path (your path) 추가 :

find ./downloads -maxdepth 2 -type f -mtime +32 -delete 

-maxdepth 수준이 가장 수준 역순 정렬 (Descend) (양의 정수) 아래에있는 디렉토리의 수준을 명령 행 인수 -maxdepth 0 은 테스트 및 조치를 명령 행 인수에만 적용한다는 것을 의미합니다.

+0

위대한 깨끗한 솔루션 및 정적 폴더 구조가 내 경우에는 작동합니다. 나는이 대답을 받아 들일 것이다. –

0

트릭을

find ./downloads ! -path ./downloads/*/archive/* -mtime +32 -type f -delete 
+0

보관 폴더에 1 개 이상의 파일이 없으면 올바르게 작동합니다. 이 경우 명령'find ./fuel/app/downloads! -path ./fuel/app/downloads/*/archive/* -mtime +32 -type'은'find : ./fuel/app/downloads/primozrome-sp/archive/image001-3.png : unknown을 반환합니다. primary or operator' –

+0

그러면 첫 번째 별표를 [^ /] * –

+0

유망한 것으로 바꿀 수 있지만 _shell_에 의한 조기 확장을 방지하려면 패턴을 _quote_해야합니다. 대화 형 쉘에서 히스토리 확장 기능과의 충돌을 막기 위해'! '대신'-not'을 사용하는 것이 더 좋습니다. 따라서 :'-not -path './downloads/*/archive/*'' – mklement0

관련 문제