read
我正在尝试获取 SCP 从一台服务器复制到另一台服务器的文件列表,但该命令似乎没有在循环中正确构建。
我有一个名为的文件diff_tapes.txt
,其中包含要复制的文件列表,如下所示:
/VAULT14/TEST_V14/634001
/VAULT14/TEST_V14/634002
/VAULT14/TEST_V14/634003
/VAULT14/TEST_V14/634004
等等等等……
我正在使用的 bash 命令行如下:
while read line; do scp -p bill@lgrdcpvtsa:$line $line;done < /home/bill/diff_tapes.txt
当我从命令行执行它时(我在 CentOS 上运行,所以基本上是 Red Hat),我得到:
/VAULT14/TEST_V14/634001: No such file or directory
...对于每个文件。
如果我再次运行添加-v
开关以获取更多信息,我会看到以下内容:
debug1: Sending command: scp -v -p -f /VAULT14/TEST_V14/634001
远程服务器(lgrdcpvtsa)肯定有问题的文件:
[bill@LGRDCPVTSA TEST_V14]$ pwd
/VAULT14/TEST_V14
[bill@LGRDCPVTSA TEST_V14]$ ls -ll
total 207200
-rw------- 1 bill bill 27263700 Apr 26 11:16 634001
-rw------- 1 bill bill 27263700 Apr 26 11:16 634002
-rw------- 1 bill bill 27263700 Apr 26 11:16 634003
-rw------- 1 bill bill 27263700 Apr 26 11:16 634004
就好像我第二次$line
在 scp 命令中,它被忽略了。
知道语法有什么问题吗?
编辑:
为清楚起见,文件列表更可能是这样的:
/VAULT14/634100_V14/634001
/VAULT11/601100_V11/601011
/VAULT12/510200_V12/510192
并且/VAULT10
通过/VAULT14
在两台服务器上都存在,它只是下一个文件夹节点可能不存在。
这些文件是在本地与远程机器上标记为不同的文件,因此从作为正确数据源的远程机器复制,因此递归复制在这里不起作用(我认为-r
开关是早期测试的遗留问题,所以我'已经从上面的代码中删除了它)。