Bash - 参数列表太长

Out*_*ast 7 bash scp

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

假设我使用这样的东西:

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

但是,当我尝试这样做时,我得到了回应:

argument list too long

那我怎样才能传输文件呢?

Kus*_*nda 13

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

scp -r username@remote:/remote_path /local_path/
Run Code Online (Sandbox Code Playgroud)

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

rsync -av --include='*.json' --exclude='*' username@remote:/remote_path/ /local_path/
Run Code Online (Sandbox Code Playgroud)

这只会复制名称以 结尾的文件,.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
Run Code Online (Sandbox Code Playgroud)