Linuxで* .txtパターンを除くすべてのファイルを削除する方法は?

Linuxで* .txtパターンを除くすべてのファイルを削除する方法は?

txt現在のディレクトリ内のすべてのファイルを削除する方法を知っていますrm *.txt。現在のディレクトリからファイルを除くすべてのファイルを削除する方法を知っている人はいますかtxt

答え1

あなたはそれを使用することができますfind

find . -type f ! -name '*.txt' -delete

またはbashの拡張ワイルドカード機能:

shopt -s extglob
rm *.!(txt)

またはzshから:

setopt extendedglob
rm *~*.txt(.)
#  ||     ^^^ Only plain files
#  ||^^^^^ files ending in ".txt"
#  | \Except
#   \Everything

答え2

ただ全部削除したいなら文書'*.txt'に加えて、次のコマンドを使用できます。

$ find . -type f ! -name "*.txt" -exec rm -rf {} \;

しかし、削除したい場合目次ファイルには次のものを使用できます。

$ find . ! -name "*.txt" -exec rm -r {} \;

答え3

これを行う方法はいくつかあります。しかし、最も簡単な方法は(bash)です。

shopt -s extglob
rm !(*.txt)

答え4

1つの解決策は次のことを行いませんfind

mv dir/*.txt otherdir/
rm -r dir
mv otherdir dir

これはあらゆる種類のシェルで動作します。

関連情報