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 *' \;
答え2
免責事項:私は現在生皮(rh)の著者です。https://github.com/raforg/rawhide)
こんにちは。生皮(rh)を使用すると、次のことができます。
rh -m2 -M2 -x 'rm -r %s' /a 'd && old(30*days)'
最初に確認する必要があるもの:
rh -m2 -M2 -x 'echo rm -r %s' /a 'd && old(30*days)'
-m2
同じです-mindepth 2
。
-M2
同じです-maxdepth 2
。
-x ...
一致するたびに指定されたシェルコマンドを実行します。
%s
一致するファイルパス(findなど{}
)に置き換えられます。
/a
検索パスです。
'd && old(30*days)'
少なくとも30日間d
変更(項目の追加または削除)が行われなかったディレクトリと一致します()。old(30*days)
old(month)
注:mtime
ディレクトリ検証では各ディレクトリ自体のみが考慮され、その内容はmtime
考慮されません。mtime
もそうですfind
。
答え3
役に立つコメントをいただいた皆様に感謝します。私の問題/問題を私のパソコンに再現できました。
次のコマンドを使用して問題を解決できました。
コードを少し...
base2=$(pwd)
つまり、/a
find $base2 -mindepth 2 -maxdepth 2 -type d -mtime +30 | xargs rm -R
これは出力されますが、/a/b/c
指定されたように深さが2のディレクトリのみが削除されます。つまり、/c
コマンドの実行後に/a/b
要求された操作を実行します。