正規表現を使用してコマンドラインでファイルを削除する方法は?


18

FOOXXという名前のファイルが20個あるとします。XXはファイルの番号です(例:01、02など)。

現時点では、番号10より小さいすべてのファイルを削除する場合、これは簡単で、ワイルドカード、たとえばrm FOO0 *を使用するだけです。

ただし、13〜15の範囲内の特定のファイルを削除する場合、これはより困難になります。

rm FPP [13-15]は機能せず、すべてのファイルを削除するかどうかを尋ねられます。Likewse rm FOO1 [3-5]は、FOO1で始まるすべてのファイルを削除したい

だから、このようなファイルの範囲を削除する最良の方法は何ですか?

私はbashとzshの両方を試しましたが、そのような基本的なタスクでそれほど違いはないと思いますか?


「... rm FOO1 [3-5]は、FOO1で始まるすべてのファイルを削除することを望んでいます」これは意味がなく、確かにここでは当てはまりません。
イグナシオバスケス-エイブラムス

@Ignacioええ-文字セットがその照合順序を持っているのを見たいです!
kmarsh

回答:


31

bashでは次を使用できます。

rm FOO1 {3..5}

または

rm FOO1 {3,4,5}

FOO13、FOO14、およびFOO15を削除します。

bashの展開ブレースはここに文書化されています


2
またはrm FOO{13..15}
イグナシオバスケス-アブラムス

これはZSHにも当てはまりますか?
ジャック

@ジャック:はい、そうです。
追って通知があるまで一時停止します。

@Jack:bashコマンドはzシェルコマンドのサブセットを形成します。
abhinavkulkarni

したがって正規表現とグロビング構文の両方を学ぶ必要があります。ブーフー。:)
アディティアMP

13

将来の読者のために、findコマンドはファイルを削除することもできます。私はこれに似た問題を解決しました:

find . -type f -regex '...' -delete

ただし、選択された答えは、この質問に対する最も単純な回答です。


ただし、選択した回答は、命名規則に従うファイルにのみ適しています。あなたの答えのおかげで、ディレクトリ内のすべてのオブジェクトファイルを削除できました。(私の場合は一緒に行っただけでfind . -name "*.o" -delete、それは魅力のように機能しました)
ジョンハミルトン

6

ls | grep正規表現| xargs rm


6
find -regex ... -print0 | xargs -0 ...これに使用する必要があります。そうしないと、スペースを含むファイル名では失敗します。
追って通知があるまで一時停止します。

1
もちろん、使用する場合はを使用findすることもできます-exec
イグナシオバスケス-アブラムス

私の場合、ファイルにスペースがあり、区切り文字を変更するとスペースの問題が修正されます。grep正規表現| xargsの--delimiter = '\ n'のRM
Anake

1
-1のための解析LSにしよう
evilsoup

@evilsoup、その警告を追加するための+1ですが、ファイル名に新しい行を挿入するのは誰ですか?
ユリアンオノフレイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.