Linuxで特定の文字列で始まるすべてのファイルを削除する方法


36

NAMEディレクトリツリー内の名前で始まるすべてのファイルを見つけ、1つのシェルコマンドを使用してこれらのファイルをすべて削除する必要があります。

回答:


1

名前に名前があるすべてのファイルを削除するには---使用できます

find -name . 'name*' -exec rm {} \;

1
「-f」引数として-fを追加して、「Xファイルを削除してもよろしいですか?」というプロンプトが表示されないようにすることもできます。
ユタジャーヘッド

どのバージョンのgrep持つ-execスイッチを?
ベングラハム

このコメントに下票があるのはなぜですか?
超音波54321

64

ファイル名が「foo」で始まる現在のディレクトリとそのサブディレクトリ内のすべてのファイルを削除します。

$ find . -type f -name foo\* -exec rm {} \;

NB:注意して使用-最初にバックアップ-最初にドライランも実行

$ find . -type f -name foo\*

削除されるファイルの名前が表示されます。


5
私は、200万ファイル上で削除しなければならなかったし、トラブルに実行し、find . -type f -name foo\* -deleteトリックでした
リナ

25

私はそれが私のために働いているこの方法を試しました、以下のコマンドを試してください。

rm -rf Example*

ここでの「例」は、すべてのファイルに共通のテキストです。


4
わからない、なぜこれが最高の投票答え....ではありません
DanTheMan

@DanTheManこれは、他の回答よりも4年ほど新しいためです。これは間違いなく最も簡単な答えです。
joshuakcockrell

10

以下を使用できますfind

find . -name "name*" -exec rm {} \;

また、「。」を指定する代わりに 絶対パスを指定できます。
ユタジャーヘッド

3

ではglobstarオプション(で有効shopt -s globstar):

rm -f **/NAME*

**/展開./*/*/*/*/*/*/あなたが持っている場合などには、ディレクトリで始まる名前をNAME、コマンドは、それは文句を言うでしょうrmディレクトリを削除することはできませんが、それがすべてです。

globが多くのファイルに一致する場合、これはコマンドラインの長さの制限に達する可能性があることに注意してください。

または、rm可能な限り少ない呼び出しで、コマンドラインの長さの制限はありません。

find . -type f -name 'NAME*' -exec rm -f {} +

(ステートメントを閉じる+代わりに注意し\;-execください。)


2

find . -name 'foo'* -type f -delete 最も簡単な答えのようです。

-deleteフラグなしでこれを実行すると、削除されるファイルを確認できます。


-2

ファイル/フォルダーの「Inode」番号を検索し、iノード番号を使用して削除します。以下に例を示します。

ls -il
3407873 drwxr-xr-x. 2 root   root      4096 Mar 30 07:49 p

find . -inum 3407873 -exec rm -rf {} \;

これは、別の質問に対する良い答えです。これはこの質問に対する答えではありません。
スコット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.