6つのサブディレクトリを持つディレクトリがあり、そのうち3つだけを削除したいので、forループを使用してこの3つのディレクトリで "cd"を実行しましたが、深さが2(最大深度、最大深度)のサブディレクトリを削除しようとしています。最小深さは3つのサブディレクトリ内で2)です。デフォルト(デフォルトでは3つのサブディレクトリのうちの1つ)でfindコマンドを使用しますが、深さ1(予想)でディレクトリを探します。
私のファイル構造は次のとおりです。
/a/b/c/d/e
(aは繰り返し中の3つのディレクトリのうちの1つです。)
以下は、ヘルプ/ガイドが必要なコードの一部です。
find /a -mindepth 2 -maxdepth 2 -type d -mtime +30
これは出力されます -
./b/c
だから私もいいえディレクトリを削除し/b
、そのディレクトリc
と深さ以下/内部のみを削除したいと思います。
これを行う方法はありますか?または、ディレクトリにCDを移動する必要がありますかb
?
ベストアンサー1
rm -rf
見つかったディレクトリで実行するようにコマンドを変更できますが、次の手順を実行する必要があります。とても慎重ですデータ損失が発生する可能性があるためです。実行方法は次のとおりです。
find /a -mindepth 2 -maxdepth 2 -type d -mtime +30 -exec rm -rf {} \;
いつものように、まずコマンドをテストする必要がありますecho
。
find /a -mindepth 2 -maxdepth 2 -type d -mtime +30 -exec echo "Deleting: {}" \;
これにより、削除するディレクトリが印刷され、実際にアイテムを削除する前にコマンドの動作を確認できます。
編集する:似たようなものをお探しですか?次のコマンドは破壊的ではありません。
find /a -mindepth 2 -maxdepth 2 -type d -mtime +30 -exec sh -c 'cd "{}" && echo "Deleting contents of $(pwd)"' \;
このコマンド破壊的だ!
find /a -mindepth 2 -maxdepth 2 -type d -mtime +30 -exec sh -c 'cd "{}" && rm -rf *' \;