无法通过SSH保留最新的5个文件夹并删除旧文件夹

时间:2018-01-08 09:46:08

标签: linux bash ssh

目前我正在使用ls -1t | tail -n +6 | xargs rm -rf,它在服务器本身运行良好。但是当我在bash脚本中使用root通过ssh尝试它时,它不会运行/工作。

这是我正在使用的行:ssh -q -oStrictHostKeyChecking=no -oConnectTimeout=1 root@$host "sudo cd /path/to/folder && sudo ls -1t | tail -n +6 | xargs rm -rf"

我可以知道这里的问题是什么吗?

1 个答案:

答案 0 :(得分:1)

root@$host表示您已经以root用户身份登录,因此在此处使用sudo是多余的。

cd /path/to/folder && ls -1t | tail -n +6 | xargs rm -rf

应该这样做。

但是,如果您确切知道/path/to/folder不能包含名称中可能包含危险字符的任何文件,那么这只是安全的。例如,名为..\n或类似的文件会导致整个目录被删除。

原始示例不起作用的原因是sudo执行程序,而不是一系列shell命令。此外cd不是程序,而是内置的shell,因此无法通过sudo执行,因为这不是真的有意义,目录更改将在{{}}之后丢失{1}}已退回。如果这样可行,那么在您的情况下,第一个语句(cd)将成功执行,然后第二个语句(sudo cd /path/to/folder)将在当前目录中执行,但只执行sudo ls -1t | tail -n +6 | xargs rm -rf命令作为root用户,其余为当前用户。

通过ls

执行整个命令行
sudo

或者,如果当前用户具有sudo sh -c "cd /path/to/folder && ls -1t | tail -n +6 | xargs rm -rf" 的访问权限,那么实际上只有最后一部分需要以root身份执行:

/path/to/folder