Bashスクリプトのこの「find」コマンドに混乱しましたか?


8

私は、意味を説明できなくなった誰かが作成したbashスクリプトを持っています。これは、フォルダーの自動TAR処理とバックアップに使用されます。現時点で私は最後の行で混乱しています:

find '/home/_backups/pokebrawl' -mtime +6 -type f -delete

完全なスクリプトは次のとおりです。

#!/bin/bash
#Purpose = Backup of Important Data
#Created on 17-1-2012
#Author = Hafiz Haider
#Version 1.0
#START
TIME=$(date +"%m-%d-%Y-%T")
FILENAME=pokebrawl-$TIME.tar.gz
SRCDIR=/home/servers/brawl/world
DESDIR=/home/_backups/pokebrawl
tar -cpzf $DESDIR/$FILENAME $SRCDIR
find '/home/_backups/pokebrawl' -mtime +6 -type f -delete
#END

3
追加の質問はありません。質問ごとに1つの質問があります。質問はいくつでもできます。したがって、[質問する]をクリックしてから、別の質問をします。別の質問の下部に追加しないでください。
ctrl-alt-delor 2018

回答:


11

このfindコマンドは、/home/_backups/pokebrawlディレクトリ内またはその下にある、7日以上経過している(より正確には、先週以内に変更されていない)通常のファイルを削除します。

それはおそらく読むべきです

find "$DESDIR" -mtime +6 -type f -delete

または

find "${DESDIR:?Not set correctly}" -mtime +6 -type f -delete

そのディレクトリ名を既に保持している完全に良い変数があるので。2番目のバリエーションはDESDIR、何らかの理由で空または未設定の場合にエラーを引き起こします。

これは先週分のバックアップのみを保持する方法だと思います。私は何かのように使用することをお勧めでしょうborgbackuprestic、これらは非常に多くのスペースを使用せずにたくさん長くバックアップを保持することができるだろうとして、代わりに(データはあまり変更されなかった場合、年間のためにも時間ごとのバックアップは、すべての多くのスペースを取らないでしょう) 。データの重複排除を実行し、borgbackupさらに圧縮をサポートします(リモートバックアップと暗号化もサポートされます)。

スクリプトを24時間ごと(深夜)に実行するには、cronジョブを使用します。

まず、コマンドを発行しcrontab -eます。これにより、アクティブユーザーの現在のcrontabでエディターが開きます(これは空のファイルである場合とそうでない場合があります)。

それから加えて

@daily /path/to/the/script.sh

path/to/the/script.shはスクリプトのパス名です)。

保存してエディターを終了します。

スクリプトは今夜も真夜中に呼び出されます。

たとえば、午後13時30分にスクリプトを実行する場合は、代わりに次をcrontabエントリとして追加します。

30 13 * * * /path/to/the/script.sh

crontabスケジュールの作成方法の詳細については、システムのcrontabマニュアルを参照してください(man 5 crontab)。


1
それはおそらく読まなければならない側面を:私はいくつかのスクリプト作成が意図的にこのタイプの実行時に環境変数を使用しないよう見てきたfind/ delete操作を、ケース内のいくつかのdoofusを忘れセットに$DESDIRまたは設定し、それを「/」またはsomesuchに誤って。
スティーブ

@steveまあ、DESDIR変更されてfindコマンドが更新されない場合、正しいディレクトリのクリーンアップに失敗します。${DESDIR:?Not set correctly}代わりに、それと同じようなものを使用すると役立つでしょう。
クサラナンダ

5
find '/home/_backups/pokebrawl' -mtime +6 -type f -delete

これ/home/_backups/pokebrawlにより、過去+6数日間に変更されていないディレクトリ内のすべてのファイルが検索され、削除されます。注:+67日間に相当します。

man findこれらのスイッチがどのように機能するかを確認してください。

$ man find
...
   -mtime n
          File's data was last modified n*24 hours ago.  See the comments 
          for -atime to understand how rounding affects the interpretation 
          of file modification times.

Redhatディストリビューションでは、このスクリプトをディレクトリに置くだけで、/etc/crondaily毎日実行されます。例として使用できる他のスクリプトがすでにあることがわかります。

$ sudo ls -l /etc/cron.daily/
total 12
-rwx------. 1 root root 219 Aug  1  2017 logrotate
-rwxr-xr-x. 1 root root 618 Mar 17  2014 man-db.cron
-rwx------. 1 root root 208 Nov  4  2016 mlocate
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.