web-dev-qa-db-ja.com

rmを使用して、ファイルとディレクトリを再帰的に削除します

rmを使用して、他のコマンドを使用せずに、パターンに一致するファイルとディレクトリを再帰的に削除することは可能ですか?

17
user15586

あなたの質問に直接答えるために、「いいえ-あなたはrmであなたが説明することをすることはできません」。

あなたcan、しかし、それをfindと組み合わせますか。これを行うことができる多くの方法の1つを次に示します。

 # search for everything in this tree, search for the file pattern, pipe to rm
 find . | grep <pattern> | xargs rm

たとえば、すべての*〜ファイルを削除する場合は、次のようにします。

 # the $ anchors the grep search to the last character on the line
 find . -type f | grep '~'$ | xargs rm

コメントから展開するには *

 # this will handle spaces of funky characters in file names
 find -type f -name '*~' -print0 | xargs -0 rm
35
warren

「他のコマンドを使用せずに」

番号。

8
Drakia

globstarを設定してBashを使用すると、yes

rm basedir/**/my*pattern*

たとえば、それを試してみてください。 ls -1まず、rmの前に、一致するファイルを一覧表示します。

たとえば、オプションを設定します。 shopt -s globstar


または、より短いfindバリアント:

find -type f -name 'my*pattern*' -delete

またはGNU find

find -type f -name 'my*pattern*' -exec rm {} +

または非GNUの別の代替手段find(少し遅い):

find -type f -name 'my*pattern*' -exec rm {} \;

また、必要に応じてディレクトリを削除するには、上記のコマンドでrmrm -rに変更し、findコマンドで-type fのみのマッチングをスキップします。

3

zsh(1)を使用する場合は、.zshrcでsetopt extendedglobを使用して「拡張グロブ」をオンにします。パターンの前に「** /」を付けると、再帰的に削除されます。

%rm -rf **/<パターン>

ただし、削除するファイルがたくさんある場合は、find(1) with xargs (1)または-exec。シェルスクリプトでも実行することをお勧めします。

0
kaleissin

「rm-rf」はファイル名の組み合わせであり、*や?などの一致するパターンがあると思います。 etc(例:todays_log_2009 ????。log)。それは現在のDirから始まり、そのパターンをマックするファイルを再帰的に削除します。

0
ianfuture