![디렉토리에서 확장자가 pdf인 파일을 제외한 모든 파일 삭제](https://rvso.com/image/977075/%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EC%97%90%EC%84%9C%20%ED%99%95%EC%9E%A5%EC%9E%90%EA%B0%80%20pdf%EC%9D%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%A0%9C%EC%99%B8%ED%95%9C%20%EB%AA%A8%EB%93%A0%20%ED%8C%8C%EC%9D%BC%20%EC%82%AD%EC%A0%9C.png)
다음을 포함하는 디렉토리가 있습니다.
x.pdf
y.zip
z.mp3
a.pdf
x.pdf
및 를 제외한 모든 파일을 삭제하고 싶습니다 a.pdf
. 터미널에서 이 작업을 어떻게 수행합니까? 하위 디렉터리가 없으므로 재귀가 필요하지 않습니다.
답변1
cd <the directory you want>
find . -type f ! -iname "*.pdf" -delete
- 첫 번째 명령은 파일을 삭제하려는 디렉터리로 이동합니다.
.pdf
두 번째 명령은 filename 으로 끝나는 파일을 제외한 모든 파일을 삭제합니다.
temp
예를 들어, 홈 폴더에 다음과 같은 디렉토리가 있는 경우 :
cd ~/temp
그런 다음 파일을 삭제하십시오.
find . -type f ! -iname "*.pdf" -delete
을 제외한 모든 파일이 삭제됩니다 xyz.pdf
.
이 두 명령을 결합하여 다음을 수행할 수 있습니다.
find ~/temp -type f ! -iname "*.pdf" -delete
.
현재 디렉토리입니다. 끝에 !
있는 파일을 제외한 모든 파일을 가져오는 것을 의미합니다 . 디렉토리가 아닌 파일만 선택합니다. 삭제한다는 뜻이다..pdf
-type f
-delete
참고: 이 명령은 현재 디렉터리와 모든 하위 디렉터리에 있는 모든 파일(pdf 파일 제외, 숨겨진 파일 포함)을 삭제합니다. !
이전에 와야 합니다 -name
. 단순히 -name
만 포함하고 .pdf
, -iname
둘 다 포함합니다 .pdf
..PDF
하위 디렉토리가 아닌 현재 디렉토리에서만 삭제하려면 다음을 추가하십시오 -maxdepth 1
.
find . -maxdepth 1 -type f ! -iname "*.pdf" -delete
답변2
의 확장 쉘 글로빙을 사용하면 다음을 사용하는 bash
것 이외의 확장자를 가진 모든 파일을 제거할 수 있습니다..pdf
rm -- *.!(pdf)
@pts에서 언급했듯이 --
문자는 모든 명령 옵션의 끝을 나타내며 이름이 문자로 시작하는 드문 경우에 명령을 안전하게 만듭니다 -
.
확장자가 없는 파일과 확장자가 아닌 파일을 삭제하려면 .pdf
@DennisWilliamson이 지적한 대로 다음을 사용할 수 있습니다.
rm -- !(*.pdf)
확장 글로빙은 기본적으로 활성화되어야 하지만 그렇지 않은 경우 다음을 사용하여 활성화할 수 있습니다.
shopt -s extglob
특히 스크립트 내에서 이것을 사용하려는 경우 표현식이 아무것도 일치하지 않으면(즉, 디렉토리에 pdf가 아닌 파일이 없는 경우) 기본적으로 glob이 확장되지 않은 상태로 전달된다는 점에 유의하는 것이 중요합니다. rm
명령을 실행하면 다음과 같은 오류가 발생합니다.
rm: cannot remove `*.!(pdf)': No such file or directory
쉘 옵션을 사용하여 이 기본 동작을 수정할 수 있지만 nullglob
여기에는 고유한 문제가 있습니다. 보다 철저한 논의를 보려면 다음을 참조하세요.NullGlob - Greg의 위키
답변3
$ cd <the directory you want>
$ gvfs-trash !(*.pdf)
또는 명령을 통해 mv
(그러나 이 방법으로는 .trashinfo 정보를 기록하지 않기 때문에 휴지통에서 복원할 수 없습니다. 즉, 파일을목적지여기서는 다음과 같습니다.)
mv !(*.pdf) ~/.local/share/Trash/files
답변4
bash의 GLOBIGNORE를 사용하십시오.
GLOBIGNORE=x.pdf:a.pdf
rm *
unset GLOBIGNORE
Bash의 매뉴얼 페이지에서:
글로비뇨어: 세트를 정의하는 콜론으로 구분된 패턴 목록 경로 이름 확장 시 무시할 파일 이름 수입니다.
빠른 테스트:
mkdir /tmp/foooooo
cd /tmp/foooooo
touch x.pdf y.zip z.mp3 a.pdf
GLOBIGNORE=x.pdf:a.pdf
ls -1 *
산출:
y.zip z.mp3