scp 一系列文件



例如,在我的偏远地区,有很多名为"file_1"到"file_50500000"的转储文件,我只需要从file_1000000到file_50500000的文件,增量为100000。

#!/bin/bash
files=""
for i in `seq -f '%9.0f' 1000000 100000 50500000`; do
files="$files file_$i.dump"
done
scp user@abc.abc.com:/user/$files ./

错误是"没有这样的文件或目录"。提前感谢您的任何建议。

你的 for 循环会像这样添加到$files

files="$files file_$i.dump"
# $files will look like this when the loop is done:
" file_1000000.dump file_1100000.dump file_1200000.dump ..."

现在看看当你把它与scp一起使用时会发生什么:

scp user@abc.abc.com:/user/ file_1000000.dump file_1100000.dump file_1200000.dump ./

这显然是行不通的。

如果你的文件确实在子目录/user(确定你的意思不是~user?),你可以使用{}对它们进行分组。将它们添加到循环中的$files中,如下所示:

files="$files,file_$i.dump"
# When finished, it will look like this (yes leading ,)
",file_1000000.dump,file_1100000.dump,file_12000000.dump,..."

现在使用 bash 变量替换调用 scp 来删除前导,

scp user@abc.abc.com:/user/{${files#,}} ./

如果这感觉太复杂并且您不介意额外的传输时间,也许只是在循环中一个接一个地scp文件,正如另一个答案中所建议的那样......

您必须提供 scp 的完整路径,并且可能会遇到引用问题,请尝试

#!/bin/bash
files="/user/file_1000000.dump"
for i in `seq -f '%9.0f' 1100000 100000 50500000`; do
files="$files /user/file_$i.dump"
done
scp "user@abc.abc.com:/$files" ./

例如,使用另一台计算机上的一些空触摸转储文件输出

> ./script
user password:
file_1000000.dump                             100%    0     0.0KB/s   00:00    
file_1100000.dump                             100%    0     0.0KB/s   00:00    
file_1200000.dump                             100%    0     0.0KB/s   00:00    
file_1300000.dump                             100%    0     0.0KB/s   00:00    
file_1400000.dump                             100%    0     0.0KB/s   00:00    
file_1500000.dump                             100%    0     0.0KB/s   00:00  
...

"/user" 在远程文件的路径中丢失。它仅在第一个文件路径中,实际上我不确定是否可以以这种方式为 scp 指定文件。我更喜欢:

for i in `seq -f '%9.0f' 1000000 100000 50500000`; do
scp user@abc.abc.com:/user/file_$i.dump .
done

如果文件很小,还有另一种方法可以避免建立连接的开销

ssh user@abc.abc.com "cd /user/; tar cf - $(seq -f '%9.0f' 1000000 100000 50500000)" |tar xf -

它创建 tar 存档并将其写入标准输出,该输出被重定向到本地计算机,另一个 tar 将文件从 stdout 写入文件。压缩"z"选项可用于两个tar(如果支持),或者可以将gzip和gunzip添加到管道中。

相关内容

  • 没有找到相关文章