命令无法在远程服务器上正确执行

命令无法在远程服务器上正确执行

我一直在尝试更新我的备份脚本,以便将数据保存在远程服务器而不是本地磁盘上。

我已成功转换整个脚本,但最后一部分从目录中删除了除n最新文件之外的所有文件。

为了调试并查明原因,我暂时删除了所有变量。

我希望在远程计算机上运行的命令如下:

ls -tr1 /mnt/backup1tb/testarossa/test | tail -n +5 | xargs -d '\n' rm -f

当我执行此命令时,它会执行我期望的操作。它留下最新的 4 个文件(或目录)并删除其余的。

为了通过 SSH 执行它,我的脚本中有以下行:

foo=`ssh $remoteuser@$remoteaddr ls -tr1 /mnt/backup1tb/testarossa/test | tail -n +5 | xargs -d '\n' rm -f`

我尝试删除最后一部分,| xargs -d '\n' rm -f并且确实返回需要删除的文件的目录列表。但是,添加 xarg 部分不会删除这些文件。

答案1

您需要将远程命令括在引号中才能在远程服务器上执行所有命令,否则您将在本地主机上的管道之后运行所有内容,这不是您想要的(如注释中所述):

foo=`ssh $remoteuser@$remoteaddr "ls -tr1 /mnt/backup1tb/testarossa/test | tail -n +5 | xargs -d '\n' rm -f"`

相关内容