sftp chmod 递归

sftp chmod 递归

我已经通过终端通过 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 globman 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 以某种方式做到这一点。

相关内容