2010-12-20 4 views
1

linux 및 solaris 용 X 일보다 오래된 특정 파일을 찾아 삭제하는 셸 스크립트를 작성하려고합니다. 트릭은이 과정에서 삭제해서는 안되는 몇 개의 파일이 있다는 것입니다. 내가 *의 .ZIP을 삭제하고 * .LOG 및 * .something을 유지해야 할 파일의 다음 목록에서 예를 들어 다른 파일을 제외하고 X 일이 지난 파일 찾기

. *
1.zip
2.zip
3.log
prefix.something .suffix

파일을 찾고 rm로 가져 오는 것은 쉽지만 삭제 목록에서 파일을 제외하는 데 어려움이 있습니다. 난 주위에 실험

+0

@Grove, 나는 그 스크립트에서 나는 파일의 목록이 포함됩니다 내가 발견의 결과를 먹일 스크립트를 만들 것은 제외한다 . 아주 간단하고,'목록에 없으면; rm -rf $ {file} else ... fi' – Anders

+0

문제는 제외 할 파일이 매일 같지 않다는 것입니다. 좀 더 구체적으로 말하자면 특정 시스템에 의해 생성 된 로그 파일이기도합니다. – Morfic

+0

@Grove, 여전히 문제가 무엇인지 모르겠지만 .log 및 .something으로 끝나는 파일을 제외하려면 find를 사용하십시오. 해당 파일을 찾습니다. 어레이에 저장 한 다음 모든 파일을 찾은 다음 배열의 파일을 파일 찾기와 비교하십시오 (모든 파일을 검색 할 때) – Anders

답변

4

한 여러 복잡한 같은 논리 연산자로 분류 표현 혜택을 누릴 수 있습니다 발견 :

find -L path -type f \(-name '*.log' \) -a ! \(-name '*.zip' -o -name '*something*' \) -mtime +3 

환호
G

+0

문제가 해결되었으므로 허용 된 것으로 표시해야합니다 (직접 대답을 수락하는 것이 좋습니다). – caf

+0

그래, 나도 알아,하지만 내가 할 수있는 2 일 전에 기다려야 해 ;-) – Morfic

2

을 나는 하드 코딩 된 목록을 제공 할 수있는 방법을 찾을 필요 30 일 이상 된 파일은 제외시키지 말고 제외 시키십시오. 다음은 [exclude_file]에 나열된 파일을 제외하고 30 일이 지난 모든 파일의 제거를 수행하는 작은 스크립트입니다.

EXCL_FILES=`/bin/cat [exclude_file]`; 
RM_FILE=`/usr/bin/find [path] -type f -mtime +30`; 

for I in $RM_FILES; 
do 
    for J in $EXCL_FILES; 
    do 
      grep $J $I; 
      if [[ $? == 0 ]]; then 
       /bin/rm $I; 
       if [[ $? != 0 ]]; then echo "PROBLEM: Could not remove $I"; exit 1; fi; 
      fi; 
    done; 
done; 
1

또는 당신이 할 수 있습니다 :

find /appl/ftp -type f -mtime +30 |grep -vf [exclude_file] | xargs rm -rf; 
관련 문제