모든 JPG 파일을 재귀적으로 삭제하되 "sample"이 포함된 파일은 유지하는 방법

모든 JPG 파일을 재귀적으로 삭제하되 "sample"이 포함된 파일은 유지하는 방법

.jpg파일 이름에 "sample"이 포함된 파일을 제외하고 디렉토리 트리에서 모든 파일을 어떻게 찾고 삭제할 수 있습니까 ?

예를 들어 :

a.zip          ->  keep it  
b.jpg          ->  delete it  
a-sample.jpg   ->  keep it  
b-Sample.jpg   ->  keep it  

답변1

.로 끝나는 모든 파일을 삭제하려면 jpg(대소문자 구분 안 함) sample파일 이름에 다음이 포함된 파일 제외(대소문자 구분 안 함:

find . ! -iname '*sample*'  -iname '*.jpg' -delete

이는 현재 디렉터리에서 시작하여 트리의 모든 디렉터리를 통해 반복됩니다.

작동 방식:

  • .

    이는 현재 디렉터리에서 시작하도록 지정합니다.

  • ! -iname '*sample*'

    이는 이름에 포함 find된 모든 파일을 무시하도록 지시합니다. samplein i-iname이 테스트 케이스를 구분하지 않게 만듭니다.

  • -iname '*.jpg'

    이전 조건과 and'd인 이 조건은 .jpg.

  • -delete

    이는 find해당 파일을 모두 삭제하도록 지시합니다.

위 명령을 실행하기 전에 테스트해 볼 수도 있습니다. 달리다:

find . ! -iname '*sample*'  -iname '*.jpg'

그러면 관심 있는 파일이 인쇄됩니다. 이 목록이 양호하면 -delete추가된 명령을 다시 실행하십시오.

답변2

bash에서는 다음을 사용할 수 있습니다.

shopt -s extglob

부정 일치를 활성화하려면 다음을 수행하십시오.

rm !(*[Ss]ample*).jpg

하위 폴더도 일치시키려면 켜세요.

shopt -s globstar

이중 별을 사용하십시오.

rm **/!(*[Ss]ample*).jpg

관련 정보