web-dev-qa-db-ja.com

Linuxで、パターン* .txt以外のすべてのファイルを削除するにはどうすればよいですか?

現在のディレクトリの下にあるすべてのtxtファイルをrm *.txtで削除する方法を知っています。 txtファイル以外の現在のディレクトリにあるすべてのファイルを削除する方法を知っている人はいますか?

86
Firegun

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
122
Kevin

「* .txt」を除くすべてのfilesを削除する場合は、次のコマンドを使用できます。

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

しかし、ファイルと一緒にdirectoriesも削除したい場合は、これを使用できます。

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

14
Sagar Rakshe

それを行う方法はたくさんあります。しかし、最も簡単な方法は(bash)です。

shopt -s extglob
rm !(*.txt)
11
Kent

findのない1つのソリューション:

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

これはあらゆる種類のシェルで機能するはずです。

4
michas

あなたは逆grepとxargsを使うことができます

ls | grep -v .txt$| xargs rm
4
rjv

単に行います:

rm $(ls -I "*.txt" )*。txt以外のファイルタイプを削除

同様に、「1つ以上のファイルタイプを除く」を削除する必要がある場合は、次の操作を行います。

rm $(ls -I "*.txt" -I "*.pdf" )#*。txtおよび* .pdf以外のファイルタイプを削除します

2
Surya

これは、指定されたもの以外のすべてのhidden(ドット)ファイルおよびフォルダー(.mydir):

rm -rf $(ls -aI ".mydir")
0
Chetabahana