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

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

コメント

  • As常に、実際にrmを呼び出そうとする前に、lsのような無害なコマンドで指定された回答をテストしてください。
  • ^これ男は'危険な生活を好まない.. 🙂

回答

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$は、txtgrepはパラメータとして正規表現を使用するためです。したがって、ファイルa.txtaatxtおよび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 -I "*.txt" ) #*。txt

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

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

コメント

  • StackExchangeへようこそ!-Iオプションが役立つ場合がありますが、 lsを解析しない理由を参照してください。 そして、| xargsは何を達成しますか? 引数なしで、すべての入力に対してechoを実行するだけです。
  • xargsは何を達成することになっていますか?
  • ありがとうございます。上記の場合、xargsは役に立ちませんでした。今すぐ修正しました。

回答

これは、指定されたもの(.mydir):

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です