我一直在尝试更新我的备份脚本,以便将数据保存在远程服务器而不是本地磁盘上。
我已成功转换整个脚本,但最后一部分从目录中删除了除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"`