我剛剛接觸bash腳本,現在我正在研究一個bash腳本,它應該使用scp命令從服務器下載文件列表。但是,不能保證該文件在那裏,所以我希望能夠輸出未找到的文件列表。目前,我這樣做是爲了輸出錯誤信息:程序結束時的Bash輸出
for FILENAME in [email protected] do
scp $SERVER:/home/usr/$FILENAME .
if [ $? -ne 0 ] then
echo "WARNING: $FILENAME was not found in $SERVER."
fi
done
上面的代碼工作,據我所知,但我遇到的問題是,由於如何SCP的作品,還有的已經將是一噸(因爲每個scp命令將顯示100%下載的行),並且我可能會錯過一兩條警告消息。有沒有簡單的方法讓我最終打印所有警告消息,並列出哪些文件未找到?
編輯:我忘了說明爲什麼我使用回聲而不是默認的「文件未找到」 - 我的代碼實際上應該在多個位置查找,如果它無法在第一個位置找到它。所以,更完整的版本看起來有點像這樣:
for FILENAME in [email protected] do
scp $SERVER:/home/usr/$FILENAME .
if [ $? -ne 0 ] then
scp $SERVER:/home/usr/documents/$FILENAME .
if [ $? -ne 0 ] then
scp $SERVER:/home/usr/documents/local/$FILENAME .
if [ $? -ne 0 ] then
echo "WARNING: $FILENAME was not found in $SERVER."
fi
fi
fi
done
如果沒有在第一位置上找到它,這很好,但我只希望它拋出一個錯誤,如果我不能找到它在任何地點。
使用'-q'來告訴'scp'安靜?在最後再次循環參數並查看本地文件是否存在?不要回應'if'追加到數組變量並在最後打印該數組?改爲回到標準錯誤,並將其傳遞到文件或管道標準輸出到'/ dev/null'從'scp'? –
@Etan Reisner:似乎'-q'只隱藏進度表,而不是stderr。 –
來自scp的關於文件不存在/失敗的stderr可能是OP實際需要的信息(因爲它爲他們完成了工作)。除非scp提供stderr上的其他非失敗信息,也就是說。 –