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
#!