次のコマンドを実行しています。
find /var/www/html/content/processing -type d -mtime +1 -exec rm -rf {} \;
processing
フォルダーの下のすべてのフォルダーを削除したい(処理フォルダーは削除しないでください)。
コマンドはprocessing
フォルダーも削除しています。削除するスクリプトを制限するにはどうすればいいですかonlyそのフォルダーの下のフォルダー?
最も簡単な方法は、-mindepth 1
を追加することです。これにより 最初の深さ階層をスキップ となり、親ディレクトリは除外されます。
また、rm
への追加の-exec
呼び出しは必要ありません。空の場合は フォルダーを直接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 {} \;
もう答えましたが、それでも私は別のアプローチを挙げたいと思います。
find /var/www/html/content/processing -mindepth 1 -maxdepth 1 -type d
これにより、トップディレクトリ(およびサブディレクトリも)が除外され、その上に適用するコマンドをすべて適用できるようになります。
>>オプション:
-mindepth 1:ルートディレクトリを除外するには
-maxdepth 1:サブディレクトリの解析を回避します。 (問題のある特定のシナリオでは、これは必要ありません)。
-type d:ディレクトリタイプのみをリストします。このオプションは、mindepth maxdepthを使用した後で使用する必要があります。