find /home/ -mtime +25 -exec rm -rf {} \; 2> /dev/null
上記のコマンドの出力は何で、どのように機能しますか?
-exec
{}
\;
コマンド内容
答え1
問題のコマンドが以下を見つけました。名前(ファイル、ディレクトリ、またはその他)/home
(/home
それ自体を含む)は、少なくとも25日前に変更された名前を削除します。名前がディレクトリを参照している場合は、ディレクトリツリー全体が削除されます。
関連コマンドは標準出力に書き込まれず、診断メッセージはにリダイレクトされます/dev/null
。find
ユーティリティが削除されたディレクトリを処理しようとすると、見えないエラーメッセージが生成されることがあります。これを使用すると、-depth
ディレクトリツリーはトップダウンではなくボトムアップとして扱われます。
-exec
find
外部コマンドを呼び出すために使用されます。{}
見つかった名前に置き換えられ、外部\;
コマンドの終わりを示します。
このコマンドも再帰的に一致と/home
削除、十分に古い場合。ディレクトリの修正タイムスタンプは、ファイルまたはディレクトリのみを更新します。まもなくディレクトリの下のファイルは追加または削除されるため、過去25日以内にその操作を実行していない場合、このコマンドはその/home
内容をすべて削除することが期待されます(root権限で実行している場合)。
サブディレクトリにファイルを追加または削除しても/home
タイムスタンプは更新されません/home
。
ルート以外の権限で実行している場合、/home
現在のユーザーに属するすべてのファイル、ディレクトリなどは、/home
そのユーザーまたはその親ディレクトリ(たとえば)が十分に古い場合は削除されます。
ただ削除したい場合一般ファイル、では提案します
find /home -type f -mtime +25 -exec rm -f {} +
この-type f
テストでは、通常のファイルのみを渡すことができます。-exec ... {} +
代わりに使用すると、できるだけ-exec ... {} \;
少数の呼び出しが発生することを意味しますrm
(いくつかの名前が収集され、に渡されます{}
)。
またはあなたがfind
サポートしている場合-delete
:
find /home -type f -mtime +25 -delete
削除された内容を表示するには、-print
前-exec
(または前-delete
)を挿入してください。削除するたびにインタラクティブにメッセージを表示するには、-ok
代わりに使用してください-exec
。この場合はを使用せず、-delete
標準エラーにリダイレクトしないでください/dev/null
。
答え2
これは見つかったパターンに対して実行される操作です。
/homeで、mtimeが25日より古いすべてのファイルを見つけて削除します。
mtimeは24時間前に修正された時間で、number * 24時間です。
- 見つかったパターンを表す{}でコマンドを実行します。 &\ はコマンドタグの終わりです。