无法使用——exclude-from将tar传输到gpg进行加密备份



我正在编写一个bash脚本,我可以用它来备份我的主目录,显然有很多隐藏的目录我不需要备份。所以我制作了一个简单的名为"排除"的文件。我在脚本中调用它进行备份,但它没有注册,并立即开始备份我想要排除的下载文件夹。

脚本如下:

#!/bin/bash
DATE=$(date +%Y-%m-%d-%H%M%S)
BACKUP_DIR="/run/media/user/backups"
SOURCE="/home/user"
tar -cvzpf - $SOURCE --exclude-from="/home/user/excludes" | gpg -c > $BACKUP_DIR/backup-$DATE.tar.gz.gpg

如果我只是压缩目录——exclude-from工作正常。但是当我将它管道到pgp时,它会忽略它并尝试压缩所有内容,其中包括许多我不希望在备份中的内容。

我觉得我只是不明白管道是如何工作的,或者一些简单的东西。如有任何帮助,不胜感激。

嗯…管道不会影响备份的结果……但有一件事可能会导致麻烦,这可能与您的问题有关,那就是您应该始终避免使用绝对路径进行tar备份。原因是,当您进行恢复时,tar将希望恢复到原始路径,如果原始路径是绝对路径,则必须在主文件夹的顶部进行恢复,而您可能并不总是希望这样做。这可能会影响你的脚本,如果你在不同的目录下运行它,或者它找不到排除文件,所以我建议先使用cd去你想去的地方。

#!/bin/bash
DATE=$(date +%Y-%m-%d-%H%M%S)
BACKUP_DIR="/run/media/user/backups"
SOURCE="/home/user"
cd "$SOURCE"
tar -cvzpf - . --exclude-from="excludes" | gpg -c > $BACKUP_DIR/backup-$DATE.tar.gz.gpg

我修改了自己的代码,并将排除转换为数组。这并没有解决问题,但它确实让我找到了它。我意识到有一个目录里面有空格,当我把它复制到我的排除文件时,我没有捕捉到其中的撇号,也没有转义它们。

修改脚本和工作基本同上。它的功能和预期的一样。格式正确:

#!/bin/bash
DATE=$(date +%Y-%m-%d-%H%M%S)
BACKUP_DIR="/backups"
SOURCE="dir"
cd "$SOURCE"
tar --exclude={'dir-to-exclude'} -cvzpf - $SOURCE | gpg -c > $BACKUP_DIR/backup-$DATE.tar.gz.gpg

最新更新