現在のディレクトリの下にあるすべてのtxt
ファイルをrm *.txt
で削除する方法を知っています。 txt
ファイル以外の現在のディレクトリにあるすべてのファイルを削除する方法を知っている人はいますか?
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
「* .txt」を除くすべてのfilesを削除する場合は、次のコマンドを使用できます。
$ find . -type f ! -name "*.txt" -exec rm -rf {} \;
しかし、ファイルと一緒にdirectoriesも削除したい場合は、これを使用できます。
$ find . ! -name "*.txt" -exec rm -r {} \;
それを行う方法はたくさんあります。しかし、最も簡単な方法は(bash)です。
shopt -s extglob
rm !(*.txt)
find
のない1つのソリューション:
mv dir/*.txt otherdir/
rm -r dir
mv otherdir dir
これはあらゆる種類のシェルで機能するはずです。
あなたは逆grepとxargsを使うことができます
ls | grep -v .txt$| xargs rm
単に行います:
rm $(ls -I "*.txt" )
*。txt以外のファイルタイプを削除
同様に、「1つ以上のファイルタイプを除く」を削除する必要がある場合は、次の操作を行います。
rm $(ls -I "*.txt" -I "*.pdf" )
#*。txtおよび* .pdf以外のファイルタイプを削除します
これは、指定されたもの以外のすべてのhidden(ドット)ファイルおよびフォルダー(.mydir
):
rm -rf $(ls -aI ".mydir")