嗨,我正在尝试使用while循环将文件列表从服务器传输到我的计算机,但是它一直提示我没有文件或目录。我不明白为什么。
所以我的文件list_numbers.txt超过500行
list_numbers.txt
1234
345
2135
2132
...
我想再次遍历此列表,以将服务器上具有相应文件夹名的文件从服务器传输到我的计算机,但用$ line_for_assembly.txt替换assembly_graph.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。我不知道我在做什么错。
答案 0 :(得分:0)
因为您没有名为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”。
例如,如果“行”的值为“组件”,您将得到
... /文档/ component_assembly /...
编辑:OP在他/她的输入文件中包含虚假字符(可能是Windows的\ r字符)。我已经相应地编辑了答案,以适应OP的特定问题。