파일이 많아요그리고특정 폴더 내의 하위 폴더는 모두 삭제하고 싶지만 X, Y, Z 파일은 유지하고 싶습니다.
다음과 같이 할 수 있는 방법이 있나요?
rm * | but NOT grep | X or Y or Z
답변1
rm을 사용하는 대신 사용하는 것이 더 편리할 수 있습니다.찾다. 이와 같은 명령은 "file"이라는 파일을 제외한 모든 항목을 삭제합니다.
find . \! -name 'file' -delete
많은 버전에서 와일드카드 및 정규식 일치를 지원할 수 있어야 합니다.
find의 출력을 rm으로 파이프할 수도 있습니다.
find . \! -name '*pattern*' -print0 | xargs --null rm
답변2
zsh를 사용하고, 연산자를 setopt EXTENDED_GLOB
사용하십시오 ~
(와는 별개로)
rm -- *~(x|y|z)
OR ^
연산자(부정):
rm -- ^(x|y|z)
그러나 파일을 다른 곳으로 옮기고 모든 것을 삭제해야 할 수도 있습니다. Enter 키를 너무 일찍 누르는 것처럼 손가락으로 스와이프하는 것이 훨씬 안전합니다.
답변3
최신 버전의 bash에는 extglob
원하는 작업을 수행하기 위한 구문을 제공하는 셸 옵션이 있습니다(설치한 버전에 해당 기능이 있는지 확인하려면 "경로 이름 확장" 아래의 매뉴얼 페이지를 확인하세요).
$ shopt -s extglob # turn on extended globbing
$ rm !(X|Y|Z)
테스트하려면 먼저 삭제할 파일 목록이 예상한 것과 일치하는지 확인하는 rm
것이 좋습니다.echo
답변4
보관하고 싶은 파일을 이동하세요. 한 단계 위로 올라가서 폴더를 삭제하세요. 폴더를 다시 만들고 해당 파일을 다시 이동하십시오.