为什么我的 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 的具体问题。
您好,我正在尝试使用 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 的具体问题。