検索するフォルダーを「検索」で除外するにはどうすればよいですか?


18

次のコマンドを実行しています。

find /var/www/html/content/processing -type d -mtime +1 -exec rm -rf {} \;

配下のprocessingフォルダをすべて削除したい(処理フォルダは絶対に削除しないでください)。

コマンドはprocessingフォルダも削除しています。スクリプトを制限して、そのフォルダーの下のフォルダーのみを削除するにはどうすればよいですか?


回答:


32

最も簡単な方法は-mindepth 1、を追加することです。これにより、最初の深さ階層スキップされ、親ディレクトリが除外されます。

また、あなたは余分な必要はありません-execへの呼び出しをrmすることができます、ちょうどdelete直接フォルダ彼らだ空の場合。

find /var/www/html/content/processing -mindepth 1 -type d -mtime +1 -delete

空でない場合:

find /var/www/html/content/processing -mindepth 1 -type d -mtime +1 -exec rm -rf {} \;

怠惰な場合は、ワイルドカードを展開することもできます。に*はデフォルトでは現在のディレクトリが含まれていないため(が設定されていない限りdotglob)、次のようにすることもできます。

find /var/www/html/content/processing/* -type d -mtime +1 -delete

ただし、これにもdotglobオプションがあるため、これには隠しフォルダーは含まれません。


こんにちは、「find:warning:-mindepthオプションを非オプション引数-typeの後に指定しましたが、オプションは定位置ではありません(-mindepthは、その前に指定されたテストとその後に指定されたテストに影響します。オプションを指定してください。他の引数の前。 "および" find: `/ folder / 50d82faf0e09e 'を削除できません:ディレクトリが空ではありません"
Elad Dotan

タイプする前にmindepthを追加します。空ではないときにディレクトリを削除するには、最初のrmアプローチをそのまま使用できます。
slhck 2013

4

問題は、findが他のディレクトリと共に現在のディレクトリ(。)を返すため、サブディレクトリだけでなく処理フォルダーも削除されることです。それを回避する簡単な方法は、オプションを追加することです

-not -name .

これにより、findは現在のディレクトリの出力を停止し、次に、それは削除されなくなります。

これは、処理ディレクトリ内でコマンドを実行している場合に機能し、絶対パスを使用しているという事実を考慮に入れます。

-not -name /var/www/html/content/processing

そして、コマンド全体は次のようになります:

find /var/www/html/content/processing -type d -mtime +1 -not -name /var/www/html/content/processing -exec rm -rf {} \;

最後のコマンドは間違っています。-nameベース名を参照し、スラッシュが付いているものと一致することはありません。おそらく使用する必要があります-path
カミルMaciorowski

1

すでに回答しましたが、それでも私は別のアプローチを挙げたいと思います。

find /var/www/html/content/processing -mindepth 1 -maxdepth 1 -type d

これにより、最上位ディレクトリ(およびサブディレクトリ)が除外され、その上に適用したいすべてのコマンドを適用できるようになります。

>>オプション:
-mindepth 1:ルートディレクトリを除外する
-maxdepth 1:サブディレクトリの解析を回避する。(問題のある特定のシナリオでは、これは必要ありません)。
-type d:ディレクトリタイプのみを一覧表示します。このオプションは、mindepth maxdepthを使用した後に使用する必要があります。


なんで-maxdepth 1?なぜ-type d二度?これは受け入れられた回答とどう違うのですか?
2018年

@Attie:ありがとう、間違いを修正しました。maxdepthは必須ではありませんが、サブディレクトリの一覧表示を避けたい場合に役立ちます。
派手な2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.