我正在尝试使用此 bash 脚本创建 tar.gz 文件并将其发送到我的备份服务器,由于某种原因它似乎没有复制它,是否有更好的解决方案来解决我正在尝试做的事情?
我宁愿在通过网络发送之前对其进行压缩
#!/bin/bash
####################################
#
# Backup to NFS mount script.
#
####################################
# What to backup.
backup_files="/home/amp/.ampdata/instances/Towny/"
# Where to backup to.
dest="/home/amp/Backups"
# Create archive filename.
day=$(date +%A)
time=$(date +%H-%M)
file=$(file)
archive_file="$file-$day-$time.tgz"
# Print start status message.
echo "Backing up $backup_files to $dest/$archive_file"
date
echo
# Backup the files using tar.
tar czf $dest/$archive_file $backup_files
rsync $archive_file [email protected]:~/backup
# Print end status message.
echo
echo "Backup finished"
date
您需要向我们展示实际发生的事情让您相信“它不会复制它”。
话虽如此,两者
tar
和rsync
一起使用是不寻常的。rsync
通常会在文件树本身上使用,它只会复制它需要复制的内容,同时考虑到已经存在的内容(仅发送差异)。您不想这样做:您只想每次都发送这个 tar.gz 文件。所以我质疑使用
rsync
.您脚本中的这一行是错误的:
它正在执行命令
file
并将输出放入名为 file 的变量中。就其本身而言,这将是 stderr 上的错误输出,而 stdout 上没有任何内容,因此$file
保持为空。为了取得进展,我假设这个变量被设置为字符串“file”。一旦我们解析了变量的内容,您的脚本就会这样做:
因此,如前所述,您不需要同时使用
tar
和rsync
。您tar
用于在本地存储档案,然后将其发送到远程主机。为什么要保留本地档案?您将如何防止它们填满您的本地存储空间?您可以直接
tar
通过 SSH 连接:其他一些评论:
tar
命令使用了 gzip 压缩。您可以考虑tar
使用其他压缩格式,如 XZ、bzip2、zstd 等。在脚本中的任何地方,您都将其
$dest/$archive_file
称为要创建和复制的文件,除了rsync
应该将其复制到其他主机的命令中。修复呼叫并重rsync
试。