目前我正在使用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"
我可以知道这里的问题是什么吗?
答案 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