
.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
된 모든 파일을 무시하도록 지시합니다.sample
ini
은-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