4

特定のディレクトリにある 99 日より古いファイルを削除するために cronjob を作成する必要がありますが、ファイル名が信頼できる Linux ユーザーによって作成されたかどうかはわかりません。特殊文字、スペース、スラッシュ文字などを期待する必要があります。

これが私がうまくいくと思うものです:

find /path/to/files -mtime +99 -exec rm  {}\;

しかし、特殊文字がある場合、または読み取り専用のファイルが見つかった場合、これは失敗すると思われます (cron はスーパーユーザー権限で実行されない可能性があります)。そのようなファイルに適合する場合は、続行する必要があります。

4

4 に答える 4

11

を使用する場合、 はコマンドを直接呼び出して、各ファイルの名前を一度に 1 つずつ渡すため、スペース、タブ、改行、または特殊文字-exec rm {} \;に問題はありません。findrm

パラメータを渡していないため、ディレクトリはそのコマンドでは削除されませ-rん。おそらく、ディレクトリも削除したくないでしょう。それは少し危険な結果になる可能性があります。-f書き込み権限がない場合に備えて、強制を実行するパラメーターを含めることもできます。root として cron スクリプトを実行すれば、問題ないはずです。

私が心配する唯一のことは、削除したくないが、過去 100 日間変更されていないファイルにアクセスする可能性があるということです。たとえば、職場で autodestruct シーケンスを停止するためのパスワードです。ファイルは過去 100 日間変更されていない可能性がありますが、自動破壊シーケンスが開始されると、パスワードが失われたためにそのファイルが非難されることは望ましくありません。

さて、より合理的なのは、使用されているがほとんど変更されていないアプリケーションです。現在の仕事を保持しているなどの理由で、誰かの履歴書が更新されていない可能性があります。

したがって、仮定には注意してください。ファイルが 100 日間変更されていないからといって、そのファイルが使用されていないわけではありません。より良い基準は (まだ疑わしいですが)、ファイルが過去 100 日間にアクセスされたかどうかです。多分これは最終的なコマンドとして:

 find /path/to/files -atime +99 -type f -exec rm -f {}\;

もう一つ...

一部のfindコマンドには、-deleteパラメーターの代わりに使用できるパラメーターがあり-exec rmます。

 find /path/to/files -atime +99 -delete

これにより、見つかったディレクトリとファイルの両方が削除されます。

もう 1 つの小さな推奨事項: 最初の 1 週間は、ログ ファイルで見つかったファイルを削除するのではなく保存してから、ログ ファイルを調べます。このようにして、重要なものを削除していないことを確認します。ログ ファイルに触れたくないものが何もないことに満足したら、それらのファイルを削除できます。1 週間後、重要なものは何も削除しないことに満足したら、findコマンドを元に戻して削除を実行できます。

于 2012-06-20T13:06:47.247 に答える
1

このオプションを指定して実行するrmと、-fファイルへの書き込み権限があるかどうかに関係なく、ファイルが削除されます (重要なのは含まれているフォルダーだけです)。したがって、フォルダ内のすべてのファイルを消去するか、何も消去しないかのいずれかです。サブフォルダーを消去する場合も追加-rします。

そして、私はそれを言わなければなりません:非常に注意してください!あなたは火遊びをしています;)fileコマンドのような害の少ないものでデバッグすることをお勧めします。

たとえば、次のような一連のファイルを作成することで、これをテストできます。

touch {a,b,c,d,e,f}

そして、それぞれに必要に応じて権限を設定します

于 2012-06-20T12:58:52.280 に答える
1

常に を使用してください。そうしないと、wiich がオプションとして解析されるrm [opts] -- [files]などのファイルでエラーが発生するのを防ぐことができます。-rfファイル名を指定したら、すべてのオプションを終了します。

于 2012-06-20T17:29:58.053 に答える
1

-execdirの代わりに使用する必要があり-execます。さらに良いことに、マニュアルのセキュリティに関する考慮事項のfind章をすべて読んでください。findutils

于 2012-06-20T13:01:21.600 に答える