많은 파일을 컴파일하는 스크립트를 작성 중입니다 .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.aux
tex
function cleantex () {
find . -name "$1*" | grep -vP '.tex$|.pdf$|.foo$|.bar$' | while read -r i; do rm "$i"; done
}
Bash 스크립트에서 이러한 파일을 삭제하려는 경우에는 실제로 이 기능이 필요하지 않습니다. 스크립트에 다음 줄을 추가하세요( mytexfile
tex 파일 이름으로 변경).
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