Linux에서 * .txt 패턴을 제외한 모든 파일을 삭제하는 방법은 무엇입니까?

rm *.txt<로 현재 디렉토리 아래의 모든 txt 파일을 삭제하는 방법을 알고 있습니다. / div>. txt 파일을 제외한 현재 디렉터리의 모든 파일을 삭제하는 방법을 아는 사람이 있습니까?

댓글

  • As 항상 ls와 같은 무해한 명령으로 주어진 답변을 테스트 한 후 실제로 rm를 호출하려고 시도합니다.
  • ^ 이것은 남자는 ' 위험하게 사는 것을 좋아하지 않습니다 .. 🙂

답변

find를 사용할 수 있습니다.

find . -type f ! -name "*.txt" -delete 

또는 bash의 확장 글 로빙 기능 :

shopt -s extglob rm *.!(txt) 

또는 zsh :

setopt extendedglob rm *~*.txt(.) # || ^^^ Only plain files # ||^^^^^ files ending in ".txt" # | \Except # \Everything 

댓글

  • 이 중 일부는 폴더가 있는지 여부와 폴더로 수행 할 작업에 따라 조정해야 할 수 있습니다.
  • 반드시 ' t *.!(txt)!(*.txt)입니까?
  • @LauriRanta는 '에 따라 다릅니다. 우리가 가지고있는 폴더에 ' 답변을받지 못했습니다. 모든 파일에 확장자가있는 것처럼 ' 괜찮으며 폴더가 있으면 rm가 질식합니다.
  • ' 괄호에 문제가 있습니다. bash 스크립트에서 globbing 스타일을 사용하면 구문 오류와 괄호에 대해 불평합니다. 그러나 CLI에서 작동합니다.
  • @izogfif이 find . -type f ! -name "*.txt" | xargs -r rm가 GNU \ xargs에서 작동하는지 확인합니다. BSD 및 UNIX xargs 명령에는 -r 로컬 man xargs

Answer

“*. txt”를 제외한 모든 파일 을 삭제하려는 경우 다음을 수행 할 수 있습니다. 다음 명령을 사용합니다.

$ find . -type f ! -name "*.txt" -exec rm -rf {} \;

하지만 도 삭제하려는 경우 디렉토리 파일과 함께 다음을 사용할 수 있습니다.

$ find . ! -name "*.txt" -exec rm -r {} \;

답변

여러 가지 방법이 있습니다. 하지만 가장 간단한 방법은 다음과 같습니다 (bash) :

shopt -s extglob rm !(*.txt) 

댓글

  • 어떻게 사용할 수 있나요? 여러 확장명을 지정하려면?
  • shopt -s extglob는 강력합니다. tecmint.com/ … 는 좋은 예를 제공합니다. 특정 확장자를 제외한 모두 삭제하려면 rm -v !(*.zip|*.odt)가 작동합니다.

Answer

반전 된 grep 및 xargs를 사용할 수 있습니다.

ls | grep -v .txt$| xargs rm 

댓글

  • ls | grep -v *.txt | xargs rm도 잘 작동합니다.
  • @phillipsk grep -v *.txt는 정확히 하나의 .txt 파일입니다. 아무것도없는 경우 grep*.txt를 패턴으로 사용합니다. '가 둘 이상인 경우 다른 모든 .txt 파일 내에서 첫 번째 파일 이름을 검색하고 ls. (정확한 결과는 셸 '의 glob 옵션에 따라 달라질 수 있습니다.)
  • .txt$txt 점에 관계없이. grep는 정규식을 매개 변수로 사용하기 때문입니다. 따라서 a.txtaatxta-txt 파일은 모두이 표현식과 일치합니다. 올바른 표현은 ls | grep -v \\.txt$ | xargs --no-run-if-empty rm 여야합니다. 호기심 많은 사람들을 위해 : 표현식을 안전하게 다루고 싶다면이 테스트 표현식을 사용하십시오. ls | grep \\.txt$ | xargs --no-run-if-empty echo (참고 : ' s no -v 플래그 및 rm=>echo). 참고 2 : 이중 백 슬래시를 발견했을 수 있습니다. 하나는 정규식 용이고 다른 하나는 bash가 슬래시를 이스케이프하기위한 것입니다.

Answer

:

mv dir/*.txt otherdir/ rm -r dir mv otherdir dir 

모든 종류의 셸에서 작동합니다.

답변

간단한 작업 :

rm $(ls -I "*.txt" ) # *. txt를 제외한 파일 유형 삭제

마찬가지로 “하나 이상의 파일 유형 제외”를 삭제해야하는 경우 다음을 수행하십시오.

rm $(ls -I "*.txt" -I "*.pdf" ) # *. txt를 제외한 파일 형식 삭제 & * .pdf

댓글

  • StackExchange에 오신 것을 환영합니다!-I 옵션이 유용 할 수 있지만 LS를 구문 분석하지 않는 이유 를 참조하세요. 그리고 | xargs는 무엇을 달성합니까? 인수없이 모든 입력에 대해 echo를 실행합니다.
  • xargs가 달성해야하는 것은 무엇입니까?
  • 감사합니다. 위의 경우 xargs가 유용하지 않았으며 지금 수정되었습니다.

답변

이것은 또한 명시된 것을 제외한 모든 숨겨진 (점) 파일 및 폴더 (.mydir) :

rm -rf $(ls -aI ".mydir") 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다