web-dev-qa-db-ja.com

特定のフォルダ内の特定の拡張子を持つすべてのファイルを削除するにはどうすればよいですか?

現在の作業ディレクトリ(cdを使用して移動する)を特定のディレクトリに設定し、次のように入力した場合:

rm *.xvg

このコマンドは何をしますか?上記のコマンドが作業ディレクトリ内の拡張子.xvgonlyを持つファイルをonly削除するのは本当ですか?

上記のコマンドは.xvgファイルのみを削除することを確実にしたいので、質問する前にこれを試すことに神経質になりました。作業ディレクトリにあります

39
Andrew

はい、rm *.xvgonlycurrentディレクトリ内の指定された拡張子を持つファイルを削除します。

実際にファイルを削除するディレクトリにいることを確認するgood方法は、pwdコマンドを使用して現在のディレクトリを表示し、lsを実行して、期待するファイルが見つかったことを確認することです。

rmコマンドを発行することに少し不安がある場合は、次の2つのことを実行できます。

  1. ls *.xvgと入力すると、このコマンドの影響を受けるファイルのリストが表示されます。

  2. lotのファイルがない限り、rm-iコマンドラインスイッチをいつでも使用できます(cpmvにも存在します)。 rm -i *.xvgを使用すると、個々のファイルを削除してもよい場合はプロンプトが表示されるため、予期しないものが削除されることはありません。 (ただし、ファイルがたくさんある場合、これは退屈です。)

37
Levon

ディレクトリに移動する必要はありません。使用するだけです

rm /some/dir/*.xvg 

/ som/dirが存在しないパスにタイプミスまたは同様のミスがある場合:

cd /som/dir
rm *.xvg

現在のディレクトリにあるすべての.xvgファイルを誤って削除します。最初のコマンドは実行されず、再度cdする必要はありません。

別の方法は、findを使用することです。

find /some/dir/ -maxdepth 1 -type f -name "*.xvg" -delete 
21
user unknown

はい、rm *.xvgは、現在のディレクトリにある.xvgで終わるファイルのみを削除します。これが理由です。

このようなコマンドを入力すると、使用しているシェル(bashだとしましょう)とコマンドバイナリの間で作業が分割されます。

which rmと入力すると、バイナリを見つけることができます。この小さなプログラムはファイルのリンクを解除します。このようなプログラムはコマンドラインから起動でき、起動時に引数のリストprog arg1 arg2 arg3を読み取ることができます。 rmの場合、これらは削除される完全修飾ファイル名のリストとして解釈されます。したがって、ファイルfoo.barを含むディレクトリにいる場合は、delete 'foo.*'と入力するとrm: foo.*: No such file or directoryになります。ファイルパターンを囲む一重引用符に注意してください。これらはシェルに引数をそのままシェルに渡すように指示します。

ただし、同じディレクトリにrm *.barと入力すると、ファイルが削除されます。ここで起こっていることは、コマンドを入力するために使用しているプログラムであるシェルが、引数をコマンドに渡す前にいくつかの変換を実行していることです。これらの1つは「ファイル名の拡張」と呼ばれ、「グロビング」とも呼ばれます。 bashファイル名の展開のリスト here を確認できます。最も一般的な展開の1つは*で、現在のディレクトリでファイル名に展開されます。

作業中のグロブを確認する簡単な方法は、echoを使用することです。これは、シェルを介して渡されたすべての引数を出力します。したがって、同じディレクトリでecho *と入力すると、foo.barが出力されます。したがって、rm *.barと入力すると、シェルは引数リストをfoo.barに展開し、それをrmコマンドに渡します。

グロビングを制御する方法はいくつかあります。たとえば、bashの最近のバージョンでは、再帰的な展開を行うglobstarと呼ばれるオプションをオンにすることができます。 echo **/*.barと入力すると、すべてのサブフォルダで.barで終わるすべてのファイルのリストが表示されます。したがって、globstar対応のbashにrm **/*.barと入力すると、サブフォルダー内の一致するすべてのファイルが再帰的に削除されます。

3
purzelrakete

コマンド:

  rm ./*.pgm

私のために働く

コマンド:

rm *.pgm

エラーコマンドを表示します(ポーランド語、翻訳済み):

rm: wrong option - '1'
Use "rm ./-1000.pgm" to delete the file '-1000.pgm'.
Write "rm --help" for information.

bash --version
GNU bash, wersja 4.4.19(1)-release (x86_64-pc-linux-gnu)
1
Adam