我想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