我正在尝试使用 putty 将一个大文件传输到远程服务器。在传输文件期间(因为文件很大,需要一些时间来传输),权限设置为某些默认只读(rw-r---- )。
我需要在文件传输过程中(这意味着文件正在传输时)设置文件的权限。我怎样才能在腻子中做到这一点?请任何人提出建议。
我是 Linux 命令新手,您能否提供一些我可以遵循的语法。
答案1
我认为这个答案这就是您正在寻找的。
将其粘贴在这里,以便我可以添加一些解释:
您可以使用
rsync
以下方式进行转账:rsync --chmod=u+rwx,g+rwx,o+rx file.txt user@host:abc/
这会将文件移动到的 home内的file.txt
目录,同时还设置指定的权限。如果您需要设置绝对路径而不是位于 的主目录内的路径,只需写出所述完整路径,包括前导斜杠(例如:)。abc
user
host
user
user@host:/abs/path/
如果您更喜欢使用
scp
,您可以在转移后设置权限:scp file.txt user@host:abc/ ssh user@host 'chmod 755 abc/file.txt'
这与上一步相同,但分为两个命令;首先上传,然后权限更改。您要求仅使用一个命令来处理它,与上传相同,但我认为有一个额外的选择可能会帮助其他人。
答案2
实际的 PuTTY 应用程序是一个终端仿真器,它本身并不传输文件。但psftp
它带有pscp
文件传输命令。
不幸的是,既不psftp
也pscp
不允许设置文件权限尽管文件正在传输中。选项-p
将pscp
保留文件时间戳,但不保留权限。使用 时psftp
,文件传输命令put
没有mput
指定远程权限的选项,但chmod
您可以使用一个单独的命令在传输完成后设置文件权限。chmod
有关的命令的信息,请参阅 PuTTY 文档第 6.2.14 章psftp
。
如果您有在传输文件后立即自动处理文件的功能,请注意,您可能需要首先使用psftp
以下任一方式传输文件:
- 到不同的目录
- 或一个临时文件名不是匹配自动化正在寻找的东西
传输完成后,使用 设置权限chmod
,最后使用该mv
命令将文件移动到自动化使用的目录,或将文件重命名为其实际的预期名称。
(在任何兼容 POSIX 的 unix 风格文件系统上,在单个文件系统中移动/重命名文件的任何操作都必须是原子操作,即其他进程将把文件操作视为“尚未完成”或“完全完成”,而绝不会以任何方式“进行中”。此处此属性用于确保自动化不会看到它期望的文件,直到文件完全传输并具有允许访问的权限。)
此过程还有助于保证自动化永远不会捕获仍在传输过程中的文件,或者由于传输过程中网络连接失败而导致不完整的文件。
例如,您可以制作如下脚本:(例如filetransfer.scr
)
cd /some/directory
mkdir incomplete_xfer
cd incomplete_xfer
put file.txt
chmod a+rw file.txt
mv file.txt ..
cd ..
rmdir incomplete_xfer
然后运行它:
psftp remoteuser@remotehost -b filetransfer.scr
或者,如果您知道远程端需要*.xml
文件并且不会对具有任何其他后缀的文件做出反应,您也可以这样做:(替代filetransfer.scr
)
cd /some/directory
put file.xml file_tmp_incomplete_xfer
chmod a+rw file_tmp_incomplete_xfer
mv file_tmp_incomplete_xfer file.xml