rm *.txt
<によって現在のディレクトリにあるすべてのtxt
ファイルを削除する方法を知っています。 / div>。 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
コメント
- フォルダがあるかどうか、およびフォルダで何をしたいかによって、これらの一部を調整する必要がある場合があります。
- ' t
*.!(txt)
be!(*.txt)
? - @LauriRantaは'に依存します私たちが持っているフォルダ内'回答がありません。 'すべてのファイルに拡張子が付いている場合はそのままで問題ありません。また、フォルダがある場合は
rm
がチョークします。 - 'ブラケットに問題があります。 bashスクリプトでglobbingスタイルを使用すると、構文エラーと括弧について文句を言います。ただし、CLIから実行することはできます。
- @izogfifこの
find . -type f ! -name "*.txt" | xargs -r rm
がGNU \ xargsで機能することを確認してください。 BSDおよびUNIXのxargsコマンドに-rがない場合があります。ローカルのman xargs
回答
“*。txt”を除くすべてのファイルを削除したい場合は、次のことができます。次のコマンドを使用します:
$ find . -type f ! -name "*.txt" -exec rm -rf {} \;
ただし、も削除する場合ディレクトリをファイルと一緒に使用すると、次のように使用できます:
$ find . ! -name "*.txt" -exec rm -r {} \;
回答
それを行う方法はたくさんあります。ただし、最も簡単な方法は(bash)です。
shopt -s extglob rm !(*.txt)
コメント
- 使用方法これは複数の拡張子を指定しますか?
-
shopt -s extglob
は強力です。 tecmint.com/ … が良い例です。特定の拡張子を除くすべてのを削除するには、rm -v !(*.zip|*.odt)
が機能します。
回答
反転したgrepとxargsを使用できます
ls | grep -v .txt$| xargs rm
コメント
-
ls | grep -v *.txt | xargs rm
も同様に機能します - @phillipsk
grep -v *.txt
はは1つの.txt
ファイルです。存在しない場合、grep
はパターンとして*.txt
を使用します。 'が複数ある場合は、他のすべての.txt
ファイル内の最初のファイル名を検索し、ls
。 (正確な結果は、シェルの'グロブオプションによって異なる場合があります。) -
.txt$
は、txt
。grep
はパラメータとして正規表現を使用するためです。したがって、ファイルa.txt
とaatxt
およびa-txt
はすべてこの式と一致します。正しい式はls | grep -v \\.txt$ | xargs --no-run-if-empty rm
である必要があります。好奇心旺盛な人向け:式を安全に試してみたい場合は、このテスト式ls | grep \\.txt$ | xargs --no-run-if-empty echo
を使用してください(注:'はありません-v
フラグとrm=>echo
)。注2:二重の円記号に気付いたかもしれません。 1つは正規表現用で、もう1つはbashがスラッシュをエスケープするためのものです。
回答
:
mv dir/*.txt otherdir/ rm -r dir mv otherdir dir
これはすべての種類のシェルで機能するはずです。
rm
を呼び出そうとする前に、ls
のような無害なコマンドで指定された回答をテストしてください。