linux - 使用 rm 和 ls 时无法通过 SSH 删除目录

标签 linux bash

我尝试在将代码部署到服务器时清理发布目录,但我需要至少保留 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/

相关文章:

bash - 递归复制到相对目标路径

linux find命令-全名与路径

python - 使用python在Linux上更改鼠标灵敏度/dpi

c - 全局描述符表的物理地址?

bash - 一个接一个地运行命令,即使我暂停了第一个命令 (Ctrl-z)

bash - 如何查找以特定前缀开头的目录中的所有目录?

linux - 使用 bash 脚本添加到 $PYTHONPATH

c - 如何从 simple_strtol() 获取错误状态? (在 C 中将字符串转换为 int)

bash - 在同一命令中删除重复行并覆盖文件

macos - 将 mysql 添加到我的 .bashrc PATH