Bash - 参数列表太长

Bash - 参数列表太长

我想scp从远程服务器到本地计算机一个包含大约 115k json 文件的大文件夹。

假设我使用这样的东西:

scp username@remote:/remote_path/*.json /local_path/

然而,当我尝试这样做时,我得到了回应:

argument list too long

那我该如何传输文件呢?

答案1

考虑传输整个目录而不是单个文件:

scp -r username@remote:/remote_path /local_path/

如果这会传输太多,并且您确实只想传输名称以.json单个目录结尾的文件,您可能需要考虑rsync(它具有更好的设施来过滤传输的内容):

rsync -av --include='*.json' --exclude='*' username@remote:/remote_path/ /local_path/

这只会复制名称以 结尾的文件.json,而忽略其他名称。这里需要终止/源。

-a选项使传输还传输文件元数据(基本上是时间戳)并使rsync递归到子目录(但这受到--exclude上面的限制),而-v用于详细操作。

第三种选择是创建tar远程目录的存档,或者至少创建您想要传输的文件,然后scp将该存档转移到本地系统。事实上,这可以通过ssh模拟来一次性完成scp -r

ssh username@remote 'tar -c -f - -C /remote_path .' | tar -x -f - -C /local_path

相关内容