web-dev-qa-db-ja.com

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

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

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

12
user364819

findを使用:

find ~/tmp -type f -mtime +0 -delete
  • ~/tmpは再帰的に検索されるディレクトリです。これを適宜変更してください

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

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

  • -deleteは、一致したファイルを削除します

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

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

-atime n

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

また、精度が必要な場合は、find-mminオプションを見て、時間を分単位で示す必要があることに注意してください。

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)'
21
heemayl

/home/username/directoryおよびその下のすべてのディレクトリ内の1日より古いすべてのファイルを削除できるはずです:

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などです。

詳細については、cronおよびcrontabmanpagesにアクセスしてください。

6
Limecat