如何在Cygwin Bash脚本中访问共享驱动器?

4
#!/bin/bash
"mirror -R //thevault/Shared/Operations/Marketing/test --only-missing -e ;exit"

我正在使用lftp工具来镜像共享文件夹中的内容。但是出现了“无此文件或目录”的错误。请问正确的写法是什么?以及如何在文件名中转义空格,我已经尝试了很多方法都不行。
我还尝试了 /cygdrive/s/Operations/Marketing/test这个路径,在我登录并运行脚本时可以工作。但是当任务在没有我的登录情况下运行时,日志文件会出现相同的“无此文件”错误。

我认为解决这个问题的第一步是使用sftp而不是Windows网络,如果您需要在未登录时使其工作。我已经看到samba移植到了cygwin,但您同样可以通过sftp和主机密钥身份验证轻松解决此问题。 - Mike Pennington
Mike,感谢您的回复。这只是一个快速而简单的概念,以便我可以使用诸如sftp和samba之类的工具进一步完善该过程。您有没有想法如何放置正确的路径? - Kelbizzle
如果您使用sftp,访问服务器不是使用路径的问题;请通过sftp连接并根据您在安装sftp服务器时设置的目录进行文件的put/get。因此,您需要设置sftp服务器以访问您尝试镜像的目录。 - Mike Pennington
@Kelbizzle,更改是在两台机器上发生还是只在一台机器上发生?如果更改发生在两台机器上,则可能需要使用类似于rsync的东西,而不仅仅是通过sftp拉取文件。 rsync还意味着通过ssh进行shell访问,因此它可以在连接的两侧启动rsync - Mike Pennington
更改在共享驱动器上本地进行。任何不存在于服务器上的文件都将上传到服务器。所有不在共享驱动器上的内容都将从FTP服务器中删除。使用带有 --only-missing -e 选项的 lftp 可以完美地满足我们所需的需求。我会检查你提到的解决方案。现在我正在运行脚本,每隔十分钟左右就会启动 MS 任务计划程序。目前这个方法可以正常工作,但只能在登录状态下操作。另一个问题是我不是 web/ftp 服务器的管理员,因此我在没有得到审批的情况下对该特定服务器进行更改的权限受到限制。 - Kelbizzle
再次感谢您的回复,Mike。 - Kelbizzle
2个回答

4

我认为在cygwin中一般不支持UNC路径名(即\\服务器\共享),因此您需要依赖于映射到网络驱动器,然后使用/cygdrive/s。 要解决在未登录时无法正常工作的问题,您需要从脚本中调用Windows的NET程序:

net use s: \\thevault\Shared password /user:myuser 

在明文密码方面可能存在一些安全隐患,因此另一个可能性是确保脚本正在从具有对此服务器的读取权限的用户帐户运行,然后您可以省略密码。


谢谢您的建议。我完全忘记了权限。 - Kelbizzle
我知道这个答案已经有10年了,但是今天Cygwin直接支持UNC路径。参考:https://cygwin.com/cygwin-ug-net/using.html#unc-paths - kevinarpe

1

在登出状态下,这似乎运行得很完美。

#!/bin/bash
lftp ftp://username:password@server.com -e "mirror -R //thevault/Share/folder/folder/folder\ with\ spaces/folder/folder --only-missing -e;exit"

这是因为路径中有空格导致的。之所以无法工作,是因为我重新输入路径时拼写错误了。正确路径应该是thevault/shared。

#!/bin/bash
"mirror -R //thevault/Shared/folder/folder/test --only-missing -e ;exit"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接