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


17

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

回答:


35

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

あなたはできる、しかし、あなたがそれを組み合わせるそれを行います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

1
true-最後のパイプを除外すると、最初にすべてのリストが表示されます:)
ウォーレン

2
ポスターの質問に直接答えられないかもしれませんが、彼らが望むものに最も近づくでしょう。
ドラキア

1
ドワーフ、それは理由もなく少し苦くないですか?
グヌーピ

10
使用には十分注意してくださいfind | grep | xargs rm。スペース(または改行)のあるファイルがある場合、これは壊れます(ファイル名とスペースの場所によっては)削除するつもりのないものを削除するかもしれません。find … -print0 | xargs -0 rmより堅牢になります。ただし、必要なファイルのみを一致させてprint0するには、の述語をgrep使用できず、使用する必要があることを意味しfindます。ウォーレンの2番目の例は、より堅牢find -type f -name '*~' -print0 | xargs -0 rmです。
クリスジョンセン

1
単一のコマンドでジョブを実行する場合は、指定されたfindコマンドのいずれかを使用してエイリアスを作成します。必要に応じて、これに対する回答を後で記入します。
カジュアルユーザー2009年

8

「他のコマンドを使用しない」

番号。


「最初の質問に厳密に答える(解決策を提供できないというリスクがある)」対「課せられた制限に厳密に一致しない場合でも解決策を提供する」という議論を示すいい答え。
グヌーピ

これを投稿したのは、「A Dwarf」が実際に解決策を提供した答えについて不平を言っていたからです。他のコマンドを使用しないと、実際にパターンに一致するファイルの再帰的な削除を行う方法はなく、現在のディレクトリのファイル/ディレクトリを削除するだけです。
ドラキア

3

Bashを使用し、globstarset を使用してyes

rm basedir/**/my*pattern*

一致するファイルをリストするls -1rmに、たとえば最初に試してください。

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


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

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

またはGNUの場合find

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

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

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

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


0

ファイル名と*や?などの一致パターンを組み合わせた「rm -rf」をasuumedしました。など(例えばtodays_log_2009 ????。log)これは現在のDirから始まり、そのパターンを認識しているファイルを再帰的に削除します。


パターンは現在のディレクトリのシェルによって展開されるため、これは機能しません。引用符で囲むと、パターンは特殊文字を含むファイル名になります。例えば、ファイル[を削除するには、rm '['を書くことができます。パターンは単にその意味を失います。
カジュアルユーザー2009年

0

zsh(1)を使用する場合setopt extendedglob、.zshrc で「extended globbing 」をオンにします。パターンの先頭に「** /」を付けると、再帰的に削除されます。

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

しかし、存在する場合、多く削除するファイルのは、あなたがに頼る必要がある(1)を見つけるxargsの(1)または-exec、と私はまた、シェルスクリプトでそれをやってお勧めします。

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