【问题标题】:Copying files on mounted drive复制挂载驱动器上的文件
【发布时间】:2013-07-16 04:03:33
【问题描述】:

所以我不得不编写一个脚本来分离网络文件服务器上的某些图像并备份它们以保留文件结构。为此,我将文件服务器作为文件夹安装在我的 linux 机器上,脚本将在其中运行。文件服务器是一个 windows 盒子。

文件服务器是这样挂载的:

mount -t cifs //xxx.xxx.xxx.xxx/pictures$ -o username=imageuser,password=pa$$word images

如果我运行这样的复制命令:

cp images/somefolder/subfolder/someimage.jpg images/differentfolder/subfolder/someimage.jpg

我的问题是这样的:

将“someimage.jpg”简单地从一个位置复制到 windows 机器上的另一个位置,或者将图像通过网络下载到 linux 机器,然后上传到 windows 上的新位置机器?

编辑:如果文件将被往返 - 我想知道如何做到这一点,或者至少指向正确的方向,在那里我可以阅读如何做到这一点。

【问题讨论】:

  • 该文件将通过您的客户端进行往返。 cp 命令不够聪明,无法意识到文件的源和目标位于同一台远程计算机上。它也不应该真正关心 - 它的工作是复制,而不是弄清楚文件在哪里以及是否可以应用任何优化。
  • 我的 linux 盒子有什么办法吗?
  • 使用远程 ssh 命令,例如ssh imageuser@x.x.x.x 'cp source target',这将是一个纯粹的服务器端操作,并将文件的数据保存在服务器本身中,从不将其往返于客户端。
  • @hek2mgl:是的,重写评论以反映这一点。

标签: php linux windows shell


【解决方案1】:

cpsmb 协议都不够聪明,无法意识到文件的源 + 目标位于同一远程服务器上。 cp 将简单地做它通常的事情并从源文件中获取所有数据(将其复制到客户端计算机),然后将其吐回到服务器上的目标文件中。所以是的,这将是通过客户端的往返。

这种事情的更好解决方案是使用 SSH 远程命令,将其变成纯粹的服务器端操作:

ssh imageuser@x.x.x.x 'cp sourcefile targetfile'

您仍然可以将文件服务器安装在本地计算机上以实际查看您正在处理的文件,但通过 ssh 命令执行所有文件复制/移动操作以提高效率。由于服务器是 Windows 机器,您可能必须安装 cygwin 并运行 ssh 服务器。

【讨论】:

  • 感谢您的帮助 - 在与服务器管理员交谈后,他不想这样做。我只是要使用我的脚本生成一个 .bat 脚本供他在服务器上运行。不过,我会将您的答案标记为正确,因为它显然会更好!
  • 如果是windows->windows,你可以使用psexec或者其他“remote exec”工具直接在windows box上做copy。不确定是否有任何可用于 linux 端的东西可以绑定到 psexec 使用的相同系统。
猜你喜欢
  • 2018-07-10
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 2020-03-03
  • 2018-08-27
  • 2017-10-17
相关资源
最近更新 更多