每当我尝试SCP文件(在bash中)时,它们都会以看似随机的(?)顺序结束。
我已经找到了一种简单但不太优雅的方式来保持所需的订单,如下所述。有一种聪明的方法吗?
修改:从此处删除了我的早期解决方案,使用其他建议进行了清理和调整,并在下面添加了答案。
答案 0 :(得分:4)
要将文件从本地计算机(例如您的笔记本电脑)发送到远程计算机(例如您的计算服务器),您可以使用Merlin2011的聪明解决方案:
scp
命令,假设您有远程服务器的访问密钥:scp -r $(ls -rt) user@foo.bar:/where/you/want/them/.
注意:如果您没有公共访问密钥,最好使用tar
执行类似操作,然后发送tar文件,即{{1}然后使用tar -zcvf files.tar.gz $(ls -rt)
发送该tar文件。
但要做到这一点,你可能无法直接从远程服务器运行scp
命令将文件发送到笔记本电脑。相反,您可能需要,让将文件带入您的笔记本电脑。我的蛮力解决方案是:
scp
进入要从中复制文件的文件夹。cd
ls -rt > ../filenames.txt
打印路径。现在开始:pwd
cd ..
cat filenames.txt | awk '{print "path/to/files/" $0}' > delete_me.txt
tr '\n' ' ' < delete_me.txt > filenames.txt
同样,这假设您有一个私人访问密钥,否则它对scp -r user@foo.bar:"$(cat filenames.txt)" .
远程文件更加简单,并带来它。
答案 1 :(得分:3)
可以使用rsync
按字母顺序实现文件传输:
rsync -P -e ssh -r user@remote_host:/some_path local_path
P
允许部分下载,e
递归设置SSH协议和r
下载。
答案 2 :(得分:1)
您可以使用xargs
ls -r <directory> | xargs -I {} scp <Directory>/{} user@foo.bar:folder/
当然,如果您没有公钥验证,则需要多次输入密码。
您也可以使用cd
并仍然跳过中间文件。
cd <directory>
scp $(ls -r) user@foo.bar:folder/