rmを使用して、他のコマンドを使用せずに、パターンに一致するファイルとディレクトリを再帰的に削除することは可能ですか?
あなたの質問に直接答えるために、「いいえ-あなたは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
「他のコマンドを使用せずに」
番号。
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 {} \;
また、必要に応じてディレクトリを削除するには、上記のコマンドでrm
をrm -r
に変更し、find
コマンドで-type f
のみのマッチングをスキップします。
zsh(1)を使用する場合は、.zshrcでsetopt extendedglob
を使用して「拡張グロブ」をオンにします。パターンの前に「** /」を付けると、再帰的に削除されます。
%rm -rf **/<パターン>
ただし、削除するファイルがたくさんある場合は、find(1) with xargs (1)または-exec。シェルスクリプトでも実行することをお勧めします。
「rm-rf」はファイル名の組み合わせであり、*や?などの一致するパターンがあると思います。 etc(例:todays_log_2009 ????。log)。それは現在のDirから始まり、そのパターンをマックするファイルを再帰的に削除します。