2017-06-30 20 views
1

をクリアし、次のプロジェクト構造が与えられているとします再帰的に特定の名前でディレクトリを検索し、それらに

/ 
| 
|- /bin 
|- /src 
    | 
    |- /bin 
    |- abc 
     ... 
     | 
     |- /bin 

と私はbinサブディレクトリの内容を消去したいが、それらを削除しないでしょう。どのようにしてBashのコマンドラインからTisを達成するのですか?

EDIT

私はfind . -regex bin/* -type d -exec rm -rf {} \;を試みたが、無駄にしています。

+0

'bin 'の内容を削除しても、トップの' bin'より下のツリー全体が削除されませんか? – dawg

+0

その描写がはっきりしない場合は申し訳ありません。私は上記の描写の中の何かが 'bin'ディレクトリの下にあることを示唆するつもりはありませんでした。 – progfan

答えて

1

私が見つけGNUでお勧め:

find . -regex ".*/bin/.*" -type f -exec echo rm {} \; 

すべてがうまく削除echoに見える場合。

0

コマンドをデバッグします。それぞれの引数をfindに隔離して、期待される出力が得られているかどうかを確認してください。

我々はすぐに

find . -regex bin/* 

が原因で正規表現の問題のために動作しないことがわかります。我々は検索のためのmanを確認した場合、我々は正規表現は完全なパスに一致しなければならないことを参照してください。

-regexパターン ファイル名が正規表現パターンに一致します。これは検索ではなくパス全体で一致する です。たとえば、ファイル と一致させるには、./fubar3', you can use the regular expression。* bar ' または.*b.*3', but not f。* r3 'です。

これは、ジョブを実行する必要があります。

find . -regex '".*/bin/.*"' -type d -delete 

したり、コマンドを使用して:

find . -regex '".*/bin/.*"' -type d -prune -exec rm -rf {} \; 

は、予想外のシェル拡張を避けるために、あなたの表現を引用することを忘れないでください。

+1

これは 'bin'ディレクトリを削除します。これはまさに私が望まないものです。私は 'bin'ディレクトリの内容を削除したいだけです。 – progfan

+0

@progfanああ、それを逃した - しかし、答えは依然として適用されます。あなたの正規表現は間違っていて(パスにマッチしていません)、そうするために調整する必要があります。あなたの場合、 "。*/bin /.*"が必要です。編集した私の答え –

1

ファイルを削除する場合は、-rrmに渡す必要はありません(実際には危険です)。

さらに、findは、最初にrmに電話する必要なく、削除方法を知っています。

find . -type f -wholename "*/bin/*" -delete 
+0

チップのおかげで。 – progfan

関連する問題