为什么sftp rmdir不起作用?


18

我正在尝试从我的私有服务器空间中删除包含大量文件和文件夹的目录。我通过SFTP正常登录;我可以访问整个目录没有问题;我什至可以用rm删除单个文件。但这会带我一辈子-所以我真的很想对要删除的最高文件夹执行rmdir。但是当我这样做时,我得到了

无法删除目录:失败

关于我可能做错了什么的任何想法?

非常感谢,山姆


如果可以通过SFTP进入该服务器,可以使用SSH吗?如果是这样,则可以使用功能更强大的RM命令:rm -rf foo / *
克里斯(Chris)

Answers:


21

以我的经验,rmdir倾向于在空目录上工作。如果您要删除目录foo,我将执行以下操作:

$rm foo/*
$rmdir foo

2
已编辑,因为-rf标志对于sftp中的rm不存在。
克里斯(Chris)

1
SSH执行rm -rf是显而易见的答案。正如您所指出的,我在SFTP上尝试了rm -rf,但是它不能接受-rf。(SFTP中的通配符技巧也不起作用。)无论如何,感谢大家的帮助!
user1451632

那很好笑。rm foo / *在SFTP中为我工作。无论如何,我很高兴您解决了它!
克里斯,

仍然不会递归删除目录。它已经足够好了,但还不够完美:-)
KrzysztofJabłoński'16年

出现了同样的问题,rm foo/*但由于foo/包含非空目录而无法正常工作。还幸运的rsync是,我在本地创建了一个空目录,然后用于rsync -rv --delete empty_local_dir/ host.example.org:/foo/删除远程foo/目录下的所有内容。之后,可以rmdir foo通过SFTP。
ckujau

5

您尚未指定正在使用的SFTP客户端。因此,我假设使用OpenSSH SFTP(sftp)。

rmdirOpenSSH SFTP客户端中的命令直接映射到SSH_FXP_RMDIRSFTP协议请求。版本3的SFTP规范(由OpenSSH使用的规范)明确提到该SSH_FXP_RMDIR操作可能会失败,“如果指定的目录不为空”(尽管它似乎没有强制要求)。

如果目录没有子目录,则可以使用rm foo/*(意味着OpenSSH SFTP命令,而不是shell命令)首先删除目录中的所有文件。然后使用rmdir


1
一个经典的问题是:如何rm -r *使用SFTP。我认为这不可能。
加里·特尔基亚

2
@JariTurkia sftp(OpenSSH命令行客户端)无法使用。如果您有足够的客户端,则可以使用SFTP(协议)。
Martin Prikryl

如果有足够智能的SFTP客户端,我将不胜感激。有一个特定的框,出于安全原因,我需要定期对其进行修补,并且仅限于SFTP。显然,由于OpenSSH的SFTP客户端提供的命令集有限,因此在执行任何操作时都会非常痛苦。
加里·特尔基亚

询问有关您的特定问题的问题(“如何使用SFTP递归删除文件夹”)-确保您指定平台。
Martin Prikryl
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.