1種類を除く複数ファイル削除 [重複]

1種類を除く複数ファイル削除 [重複]

重複の可能性:
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

関連情報