한 가지 유형을 제외한 여러 파일 삭제 [중복]

한 가지 유형을 제외한 여러 파일 삭제 [중복]

중복 가능성:
X, Y, Z 파일을 제외한 폴더의 모든 파일을 삭제합니다.

많은 파일을 컴파일하는 스크립트를 작성 중입니다 .tex. 이후에 여러 개의 보조 파일이 생성되었습니다.

따라서 스크립트 끝에서 이를 제거하고 싶습니다. 를 사용하기가 어려운데 rm $file.xxx소스 파일과 PDF 출력을 유지하고 싶기 때문에 모든 확장자를 수동으로 작성해야 하므로 *를 사용하여 모든 확장자를 제거할 수는 없습니다.

확장 1을 제외한 모든 확장을 제거하는 방법은 무엇입니까 .tex/.pdf?

감사해요.

답변1

당신은 그것을 사용할 수 있습니다 :

rm *.{extension1,extension2,extension3}

또는 다음을 사용할 수 있습니다.

shopt -s extglob
rm !(*.tex|*.pdf)

이렇게 하면 보관하려는 파일(이 경우 *.tex 및 *.pdf)을 제외한 모든 파일이 삭제됩니다.

답변2

글쎄, rm오류를 무시할 수는 있지만 우아하지는 않습니다. :).

~/.bashrc에 다음과 같은 기능을 추가하세요.

 function cleantex () {
   find . -name "$1*" | grep -vP '.tex$|.pdf$' | while read -r i; do rm "$i"; done    
  }

그런 다음 다음과 같이 파일 이름의 (고유한) 시작 부분을 사용하여 호출할 수 있습니다.

 $ cleantex mytexfile

or로 시작하고 or로 끝나지 $file않는 지정된 디렉토리의 모든 파일을 삭제합니다 . 파일(확장자) 끝에서만 일치하는지 확인하세요 . 그렇지 않으면 파일 이름에 가 포함되어 있으므로 다음과 같은 파일을 무시합니다 . 무시할 확장자를 원하는 만큼 추가할 수 있습니다..tex.pdf$footexfoo.auxtex

 function cleantex () {
       find . -name "$1*" | grep -vP '.tex$|.pdf$|.foo$|.bar$' | while read -r i; do rm "$i"; done    
      }

Bash 스크립트에서 이러한 파일을 삭제하려는 경우에는 실제로 이 기능이 필요하지 않습니다. 스크립트에 다음 줄을 추가하세요( mytexfiletex 파일 이름으로 변경).

find . -name "mytexfile*" | grep -vP '.tex$|.pdf$' | while read -r i; do rm "$i"; done

마지막으로 이름에 상관없이 모든 tex 파일에 대해 이 작업을 수행하려면 다음을 사용하세요.

find . -name "*.tex" | sed 's/\.tex$//' | while read -r name; do 
    find . -name "$name"* | grep -vP '.tex$|.pdf$' | while read -r i; 
      do
        rm "$i"; 
      done;
done

관련 정보