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


36

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

rm *.xvg

このコマンドは何をしますか?それが真実であること上記のコマンド意志だけの拡張子を持つファイルの削除.xvg だけの作業ディレクトリにありますか?

上記のコマンドがWORKING DIRECTORYにある.xvgファイルのみを削除することを絶対に確認したいので、尋ねる前にこれを試してみることに緊張しました。

回答:


34

はい、rm *.xvgしますのみあなたの中に指定された拡張子を持つファイルを削除し、現在のディレクトリ。

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

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

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

  2. 多くのファイルがない限り、いつでも-iコマンドラインスイッチを使用できますrmcpおよびにも存在しますmv)。を使用rm -i *.xvgすると、ファイルを削除しても問題ない場合、個々のファイルの入力を求められます。(ただし、多くのファイルがある場合は面倒です:)


1
また、rm -f {*.xvg,.*.xvg}隠しファイルも削除します。またrm -R -f {*.xvg,.*.xvg}、ディレクトリも削除します。
ドール14年

20

dirに移動する必要はなく、使用するだけです

rm /some/dir/*.xvg 

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

cd /som/dir
rm *.xvg

現在のディレクトリ内のすべての.xvgファイルを誤って削除します。最初のコマンドはそうではないので、再度cdする必要はありません。

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

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

find / some / dir / -maxdepth 1 -type f -name "* .xvg" -deleteは私のために働いた!-maxdepth "n"を使用して、パスが指定されている場合にサブディレクトリ内の一致するファイルを削除します
Vinay

3

はい、現在のディレクトリで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ファイル名展開のリストを見ることができます。最も一般的な展開の1つは、*現在のディレクトリのファイル名に展開されます。

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

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


1

コマンド:

  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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.