回答:
最も簡単な方法は-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が他のディレクトリと共に現在のディレクトリ(。)を返すため、サブディレクトリだけでなく処理フォルダーも削除されることです。それを回避する簡単な方法は、オプションを追加することです
-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
。
すでに回答しましたが、それでも私は別のアプローチを挙げたいと思います。
find /var/www/html/content/processing -mindepth 1 -maxdepth 1 -type d
これにより、最上位ディレクトリ(およびサブディレクトリ)が除外され、その上に適用したいすべてのコマンドを適用できるようになります。
>>オプション:
-mindepth 1:ルートディレクトリを除外する
-maxdepth 1:サブディレクトリの解析を回避する。(問題のある特定のシナリオでは、これは必要ありません)。
-type d:ディレクトリタイプのみを一覧表示します。このオプションは、mindepth maxdepthを使用した後に使用する必要があります。
-maxdepth 1
?なぜ-type d
二度?これは受け入れられた回答とどう違うのですか?