rm *.txt
<로 현재 디렉토리 아래의 모든 txt
파일을 삭제하는 방법을 알고 있습니다. / div>. txt
파일을 제외한 현재 디렉터리의 모든 파일을 삭제하는 방법을 아는 사람이 있습니까?
댓글
답변
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.txt
및aatxt
및a-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")
ls
와 같은 무해한 명령으로 주어진 답변을 테스트 한 후 실제로rm
를 호출하려고 시도합니다.