如果 Rsync 不存在,则创建一个日志文件

Create a Log file for Rsync if not exists

我正在编写一个简单的 bash 脚本,其中 bash 脚本会将我的实时服务器与我的暂存服务器同步。我正在使用 rsync 来执行此操作。

我需要的是每天执行脚本的日志文件。我正在使用以下命令

rsync -azP --stats source-directory user@host.com:destination-directory --log-file=~/public_html/rsynclogs/rsync-backup-log-`date +"%Y-%m-%d"`.log

这个命令给我的错误是

rsync: failed to open log-file ~/public_html/rsynclogs/rsync-backup-log-2017-01-11.log: No such file or directory (2)
Ignoring "log file" setting.

所以很可能它正在寻找一个现有的日志文件,但如果它不存在,我希望创建它。请就如何实现这一目标提出建议。

一个简单的方法是执行 touch 以在执行 rsync:

之前创建一个空文件
touch `date +"%Y-%m-%d"`.log
rsync <options>

touch 如果文件名不存在,则创建一个空文件,但如果文件存在,它只是更新最后修改时间。

问题出在您的路径中的波浪号 (~)。您必须删除 = 或使用:

--log-file="$HOME/public_html/rsynclogs/rsync-backup-log-$(date +"%Y-%m-%d".log)"

反引号也是遗留的,应替换为 $( ... )

好的,在下面回答的最酷的人的良好指导下,我能够解决这个问题。实际上问题在于,如果您将 --log-filersync 一起使用,并为日志文件提供一个不存在的目录,它会给您一个日志文件不存在的错误。

但是,如果提供的目录存在,则会在提供的目录中自动创建日志文件。这是我使用的更新语法

mkdir -p -v $HOME/public_html/rsynclogs/
rsync -azP --stats source-directory user@host.com:destination-directory --log-file=$HOME/public_html/rsynclogs/rsync-backup-log-$(date +"%Y-%m-%d").log

现在 mkdir 创建一个目录。正如@janek 所建议的,我添加了 -p 只是为了检查目录是否存在,并且仅在目录不存在时才创建。

其他语法更新:

已将 ~ 替换为 $HOME。由@l'L'l

推荐

已将 backticks(``) 替换为 $( ... )。由@l'L'l

推荐