为什么我的 while 循环在重复列表时不通过 scp 工作

Why isn't my while loop working through scp when reiterating through a list

您好,我正在尝试使用 while 循环将文件列表从服务器传输到我的计算机,但它一直给我错误提示,没有文件或目录。我不明白为什么。

所以我有这个文件 list_numbers.txt 超过 500 行

list_numbers.txt
1234
345
2135
2132
...

并且我想重新遍历此列表以将文件从服务器传输到我的计算机,并使用相应的文件夹名称到我的计算机,但将 assembly_graph.txt 替换为 $line_for_assembly.txt

while read line; do scp -r user@server.com:/home/Documents/$line_assembly/assembly_graph.txt /Users/Documents/$line_for_assembly.txt; done < list_numbers.txt

所以基本上我希望它执行下面的代码,但我不必手动输入它,它会重新遍历列表。

scp -r user@server.com:/home/Documents/1234_assembly/assembly_graph.txt /Users/Documents/1234_for_assembly.txt

scp -r user@server.com:/home/Documents/345_assembly/assembly_graph.txt /Users/Documents/345_for_assembly.txt

scp -r user@server.com:/home/Documents/2135_assembly/assembly_graph.txt /Users/Documents/2135_for_assembly.txt

scp -r user@server.com:/home/Documents/2132_assembly/assembly_graph.txt /Users/Documents/2132_for_assembly.txt

但是我得到这个错误:

scp: /home/Documents//assembly_graph.txt: No such file or directory

所以它没有获取 $line_assembly,即使我执行 ${line}_assembly。我不知道我做错了什么。

因为您没有名为 line_assembly 的变量。

也许你的意思是:

while read line
 do
  line=`echo $line | tr -d '\r\n'`
   scp -r user@server.com:/home/Documents/${line}_assembly/assembly_graph.txt /Users/Documents/${line}_for_assembly.txt
done < list_numbers.txt

这将扩展为 line 的值,后跟文本“_assembly”。

例如,如果 "line" 的值为 "component",您将得到

.../Documents/component_assembly/...

编辑:OP 在 his/her 输入文件中有虚假字符(可能是 windows 中的 \r 字符)。我已经相应地编辑了答案以适应 OP 的具体问题。