我已经通过终端通过 sftp 登录到服务器。
当我运行命令时
chmod -R 755 ./*
我收到错误You must supply a numeric argument to the chmod command.
。如何在 sftp 中应用递归 chmod 755?
答案1
您可能无法做到。通过 FTP 或 SFTP 提供给您的 chmod 很可能不支持递归选项。FTP/SFTP 下可用的命令通常是您在本地 shell 下可用的命令的残缺版本。如果您很幸运,chmod 可能即使没有该-R
选项也会以递归方式运行,但如果您不幸,您将不得不遍历树,一次 chmod 每一级。
答案2
从man sftp
:
chmod mode path
将文件路径的权限更改为模式。 路径可能包含 glob(3) 字符并可能匹配多个文件。
man 7 glob
(man 3 glob
参考 glob(7))描述了我们在使用时熟悉的 *、? 和 [] 通配符模式ls
。因此,您可以使用:
chmod 755 ./*
chmod 755 ./*/*
chmod 755 ./*/*/*
重复此操作直到到达所有文件并出现错误:
Couldn't setstat on "./*/*/*": No such file or directory
在进行如此大规模的更改之前,您可以提前仔细检查哪些目录会受到影响lls
(来自man sftp
):
lls [ls-options [path]]
如果未指定路径,则显示路径或当前目录的本地目录列表。 ls-options 可能包含本地系统的 ls(1) 命令支持的任何标志。 路径可能包含 glob(3) 字符并可能匹配多个文件。
像这样(指定绝对路径以lls
避免意外):
lls -Rla /path
您还可以使用它lls -Rla /path
来确保您的chmod
工作如预期一样。
答案3
我当时正在一台服务器上工作,根据 Nicole 的上述评论,该服务器似乎不支持递归。通配符 chmod 确实有效,但在尝试在疯狂的文件夹结构上运行时超时。
最终对我有用的实际上是 Filezilla - 尽管我无法通过终端递归地执行 chmod,但 Filezilla 能够通过它的 GUI 以某种方式做到这一点。