古いディレクトリの削除

古いディレクトリの削除

3日以上前のバックアップを削除する方法をスクリプトに追加しようとしています。

削除された部分のみを残し、下から削除されたバージョンを参照してください。

私が理解したところによると、${BACKUP_DEST[$i]}/$OLDBACKUP出力は "/Users/christopherdavies/Desktop/rsync/test1.co.uk/07-06-18"と同じでなければなりません。

ただし、実行されるたびに、上記の「test1.co.uk」フォルダが3日間存在したかどうかに関係なく削除されます。

誰もが正しい方向に私を指すことができますか?何の進展も達成できませんでした...新しい目になりましたか?

#!/bin/sh

WEBSITE_HOST=(
    "[email protected]"
    "[email protected]"  
)

BACKUP_DEST=(
    "/Users/christopherdavies/Desktop/rsync/test1.co.uk"
    "/Users/christopherdavies/Desktop/rsync/test2.co.uk"
)

OLDBACKUP=`date -d "3 days ago" +"%d%m%Y"`

SITE_COUNT=${#WEBSITE_HOST[@]}

for (( i = 0; i < SITE_COUNT; i++ )); do

    # Remove old backups    
    if [ -d "${BACKUP_DEST[$i]}/$OLDBACKUP" ]; then rm -Rf ${BACKUP_DEST[$i]}/$OLDBACKUP; fi

done
exit 0

答え1

macOSのユーティリティdate(ユーザーのホームディレクトリの場所として判断して使用していると仮定)はGNUではないため、dateすべての機能をサポートしていません。

これはOLD_BACKUP変数が空であることを意味します(実行時にエラーメッセージを表示する必要がありますdate)。これは、その${BACKUP_DEST[$i]}ディレクトリが削除されたことを意味します。

代わりにdate -v -3d +'%d-%m-%Y'

#!/bin/bash

set -e

backup_dest=(
    '/Users/christopherdavies/Desktop/rsync/test1.co.uk'
    '/Users/christopherdavies/Desktop/rsync/test2.co.uk'
)

when=$( date -v -3d +'%d-%m-%Y' )

for backup in "${backup_dest[@]}"; do
    [ -d "$backup/$when" ] && rm -Rf "$backup/$when"
done

または、GNU coreutilsをインストールしてGNUを使用してくださいdate

コードに対する追加の変更:

  • exit 0最後から削除して追加してくださいset -e。スクリプトが失敗した場合は、それを確認できるはずです。

  • サイト配列は使用されません。

  • インデックスを使用する代わりに、配列内の項目を繰り返すと読みやすくなります。

  • 1行の単純なステートメントが必要な場合は、if短縮構文(より短い)を使用できます。

  • 小文字の変数名を使用します。

  • 変数拡張は常に引用されます。

  • これはスクリプトなので、-lineに引用する必要bashがあります。bash#!

関連情報