我尝试在将代码部署到服务器时清理发布目录,但我需要至少保留 5 个。
现在我使用这个命令来执行我提到的操作。
rm -rf $(ls -1t/path/to/deploy/release | tail -n +6)
当我在服务器上运行它时,一切看起来都很好,但是当我尝试通过 ssh 运行时,它不起作用。 。 .
ssh user@123.456.789.100 'rm -rf $(ls -1t/path/to/deploy/release | tail -n +6)'
任何人请帮助或建议我。我做错了什么?
最佳答案
警告:就像所有涉及 rm -Rf
和“应该有效”的事情一样,下面的内容实际上可能会删除计算机上的所有文件(因为涉及 ssh
,即本地计算机和远程计算机),并可能导致您的厨房着火。我对损坏等不承担任何责任...备份(存储在厨房以外的地方)总是一件好事,也许您应该首先使用 rm -Ri
进行测试?
你没有说失败是什么,但我注意到的一件事是 ls
命令将在 /path/to/deploy/release
目录中生成文件名列表,但 rm
不会在该目录中运行,因此它将尝试删除主目录中这些名称的文件,而不是 /path/to/deploy/release
。通过首先 cd
进入该目录,可以很容易地修复此问题(不过请务必编写命令,以便如果 cd
失败,它不会只是随机删除错误目录中的文件)。
另一个问题是该命令依赖于分词来将 ls 的输出... | tail ...
到文件名列表中,如果任何文件名包含空格和/或通配符,则会失败。这个问题解决起来比较棘手,所以我会忽略这个问题,希望它永远不会在你身上爆发。
无论如何,通过 cd
修复(并且空白错误未修复),这就是我得到的:
ssh user@123.456.789.100 'cd /path/to/deploy/release && rm -Rf $(ls -1t | tail -n +6)'
再次建议使用 rm -Ri
进行测试(并有良好的备份)。
关于linux - 使用 rm 和 ls 时无法通过 SSH 删除目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54413718/