Bash-当两个文件是远程文件时,如何比较它们上次修改的日期?

Bash-当两个文件是远程文件时,如何比较它们上次修改的日期?,bash,ssh,scp,Bash,Ssh,Scp,我的问题类似于一个。除了我要检查日期的文件在我ssh连接到/scp关闭的远程服务器上之外。 基本上,我希望能够比较一个文件在本地计算机和远程服务器上最后一次修改的日期,以及哪一个是到另一台计算机的较新副本。我知道如何进行所有的复制,我只是想知道如何比较日期。试试这个: remote=$(ssh user@server "stat -c %Y /path/to/remote_file") [[ -z "$remote" ]] && exit 1 # stop on error ($

我的问题类似于一个。除了我要检查日期的文件在我ssh连接到/scp关闭的远程服务器上之外。 基本上,我希望能够比较一个文件在本地计算机和远程服务器上最后一次修改的日期,以及哪一个是到另一台计算机的较新副本。我知道如何进行所有的复制,我只是想知道如何比较日期。

试试这个:

remote=$(ssh user@server "stat -c %Y /path/to/remote_file")
[[ -z "$remote" ]] && exit 1 # stop on error ($remote is empty)
local=$(stat -c %Y /path/to/local_file)

if [[ $remote -gt $local ]]; then
  echo remote file is newer
else
  echo local file is newer
fi

看看
manrsync
@cyrus我简单地看了一下rsync,但我希望能够双向地完成这项工作。我看了一下osync项目,但它似乎有点过头了,所以我想我只需要编写自己的程序。我遇到的唯一问题是知道哪个文件是最新的ssh@IgnacioVazquez-艾布拉姆斯我知道我的X问题,我只需要解决这个日期部分,我的解决方案工作。我想这更多的是教育而不是功能。我可能会使用
printf%q
来转义远程文件的路径,这样我们就不会将像
/tmp/$(rm-rf/)/hello
这样的狡猾的文件名转换为命令,但这非常准确……例如:
printf-v quoted_filename%q“$filename”;sshuser@server“stat-c%Y$quoted_filename”
@CharlesDuffy:谢谢你的提示!哦,嘿,这很有道理,我会用它来解决任何遇到这个问题的人:如果
文件
是指向另一个文件的符号链接,那么
stat-c%Y文件
将输出符号链接的最后修改日期,而不是链接指向的文件。在这种情况下,请使用
stat-L-c%Y文件。