![1種類を除く複数ファイル削除 [重複]](https://linux33.com/image/25089/1%E7%A8%AE%E9%A1%9E%E3%82%92%E9%99%A4%E3%81%8F%E8%A4%87%E6%95%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%89%8A%E9%99%A4%20%5B%E9%87%8D%E8%A4%87%5D.png)
多くのファイルをコンパイルするスクリプトを作成しています.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