답변:
확장 된 글 로빙 패턴을 사용 bash
:
rm ./!(*999*)
이 shopt -s extglob
기능을 사용하도록 설정 해야 합니다 (그리고 안전을 위해 모든 파일 이름에가 포함 된 경우 shopt -s failglob
이상한 이름을 가진 파일이 !(*999*)
실수로 제거 되지 않도록 999
). 패턴 !(*999*)
은 일치하는 이름을 제외하고 현재 디렉토리의 모든 이름과 일치 *999*
합니다. 숨겨진 파일 (이름이 점으로 시작하는 파일)을 제거하려면 이 dotglob
옵션 도 활성화하십시오 .
일반 파일 또는 일반 파일 (디렉토리 등이 아님)에 대한 심볼릭 링크 만 신경 쓰려면 :
for name in ./!(*999*); do [ -f "$name" ] && rm "$name"; done
zsh
상기 루프 쉘 동등한 것
rm ./(^(*999*))(.)
grep
파일 내부를 살펴볼 것이기 때문에 첫 번째 명령이 작동하지 않습니다 . 줄이없는 모든 파일을 제거 999
합니다 ( --null
옵션 을 추가 했으므로 작동합니다 xargs -0
).
grep
macOS에서는 두 번째 명령이 작동 하지 않습니다 --null-data
(그러나 --null
파일 이름 출력을 생성 할 때만 옵션 이 있습니다 ). 또한 찾을 것입니다 점에 유의 999
파일의 어디서나 경로 (디렉토리 구성 요소를 포함)뿐만 아니라 파일의 이름입니다.
failglob
옵션 을 활성화 하거나 !(*999*)
이름에 포함되지 않은 다른 파일이없는 경우 호출 된 파일을 제거 할 수도 있습니다 999
.
다음에서 이름 조건을 반전하십시오 find
.
find . -type f \! -name "*999*"
일치하는 파일을 추가 -delete
하거나 -exec rm {} +
실제로 제거하십시오.
!
에 안전 bash
합니다.
grep -l
파일 이름이 아닌 컨텐츠-v
에서 일치하는 파일을 찾거나 찾을 수없는 파일을 나열합니다 . 항상 지정한 파일의 내용과 일치하며 이름은 절대 일치하지 않습니다.grep