rsyncバックアップからスワップファイルを除外する方法は?

rsyncバックアップからスワップファイルを除外する方法は?

システムファイルをバックアップするための簡単なスクリプトを作成しようとしています。これが私がこれまでに書いた内容です:

#!/usr/bin/sh

if [ $UID != 0 ]; then
        echo "Please run me as root"
        exit 1;
fi

src="/"
dest="/mnt/system_backup/"

rsync --archive \
        --acls \
        --xattrs \
        --hard-links \
        --delete \
        --verbose \
        --filter="merge system_backup.filter" \
        $src $dest

これは私のsystem_backup.filterファイルです:

# Patterns to exclude
- swapfile
- /dev/*
- /proc/*
- /sys/*
- /tmp/*
- /run/*
- /var/cache/pacman/pkg/*
- /mnt/*
- /lost+found
- /home/*

何らかの理由で、スワップファイルはバックアップから除外されませんが、このファイルにリストされている他のディレクトリは除外されます(--dry-run2番目の引数として--verbose実行するとログに表示されます)。スワップファイルを除外する方法は?

ベストアンサー1

フィルタファイルには空白に関する特別な要件があります。たとえば、- 先行(ダッシュ、スペース)の後にすべて関連キャラクターだ。これには末尾のスペースが含まれます。

cat -e system_backup.filter(POSIXではありませんが使用可能です)sed -n l system_backup.filterを使用して、フィルタファイルに予期しない空白があるかどうかを確認できます。次の出力例は、行末を表す末尾のswapfile空白文字を示しています。$

# Patterns to exclude$
- swapfile $
- /dev/*$
- /proc/*$
- /sys/*$
- /tmp/*$
- /run/*$
- /var/cache/pacman/pkg/*$
- /mnt/*$
- /lost+found$
- /home/*$

潜在的に興味深いもう1つの文字は通常行末に^Mあり、WindowsスタイルのCR / LF行末を示す文字です。例えば、\rsed

- /mnt/*^M$

参考までに、変数を使用するときは、変数を二重引用符で囲む必要があります(スペースなどが含まれている場合)。rsyncしたがって、コマンドの終わりにrsync … "$src" "$dst"

おすすめ記事