ディレクトリ構造を損なわずに、特定のディレクトリ内の特定の時間より古いすべてのファイルをシステムで削除するにはどうすればよいですか?


12

私は自分のマシンにディレクトリを持っています。それを自分のtmpディレクトリと考えてください。しかし、それは~ください。そして、私のシステムが3時間ごとにすべてのファイルを削除するようにしたいです(ディレクトリ構造はそのままですが、ディレクトリのすべてのレベルのすべてのファイルを再帰的に削除します)1日以上古いディレクトリ。

GNOME 3.18でUbuntu GNOME 15.10を実行していますが、これはできますか?もしそうなら、どのように?ユーザーの操作を必要とせずに、これを完全に自動化したいと思います。これはログイン時に自動的に開始されるものである必要があるため、すべてのスタートアップで何かを実行する必要はありません。

回答:


21

を使用してfind

find ~/tmp -type f -mtime +0 -delete
  • ~/tmp 再帰的に検索されるディレクトリです。これに応じて変更します

  • -type f ファイルのみを検索します

  • -mtime +0 1日以上前に最後に変更されたファイルと一致します

  • -delete 一致したファイルを削除するだけです

ここでキャッチされ-mtime +0、ほとんどが使用するのではと思うかもしれない-mtime +1が、find日を計算しながら、端数の時間を無視します。そう、-mtime +1最後の変更が少なくとも2日前に行われた場合、ファイルと一致します。

引用man find-mtimeは、次と同じタイミング規則があり-atimeます。

-atime n

ファイルはn * 24時間前に最後にアクセスされました。ファイルが最後にアクセスされた24時間前の数を計算すると、小数部分は無視されるため、-atime +1と一致するには、少なくとも2日前にファイルにアクセスする必要があります。

また、精度が必要な場合は、次の-mminオプションを確認してください。find、時間を分単位で示す。

3時間後に定期的に実行するには、追加することができます cronエントリ。

実行crontab -eして追加:

00 */3 * * * /usr/bin/find ~/tmp -type f -mtime +0 -delete

を使用zshしてファイルを削除します。

rm ~/tmp/**/*(.-m+0)

に追加cron

00 */3 * * * /usr/bin/zsh -c 'rm ~/tmp/**/*(.-m+0)'

6

次のコマンドを使用すると、1日以上経過したすべてのファイル/home/username/directoryとその下のすべてのディレクトリを削除できます。

find /home/username/directory -type f -mtime +1 -delete

そして、そのコマンドを3時間ごとにスケジュールするには、cronジョブとして設定します。

crontab -e

次に、crontab内で:

0 */3 * * * find /home/username/directory -type f -mtime +1 -delete

これは、1時間(つまり0分)に3時間ごとにコマンドを実行するため、午前3:00、午前6:00などです。

行くcroncrontab manpagesそれらの詳細については。


4
この回答は実際には間違っています他の回答をご覧ください。

4
この答えは間違っており、実際には他の答え以上のことを言っていないので、あなたの答えを他の答えより正確良いものに改良するか、削除してください。

5
@ParanoidPanda高品質の回答が必要なことは承知していますが、基本的に同じことを2回コメントすることはかなり不要であり、特に新しいユーザーにとっては攻撃的と見なされる可能性があります。
RPiAwesomeness

2
@RPiAwesomeness:まあ、私は最初のコメントを編集する時間がなくなったので、2回目にコメントしました。彼らが攻撃を受けていると感じたくなかったので、間違った答えを出したので削除しなければならないと言っていたので、改善について少し付け加えました。しかし、私はこれがどのように間違った方法で取られるかを見ることができるので、私はあなたに覚えておくようお願いします:パンダはあなたが彼の竹を奪うときだけ攻撃的になります。;-)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.