使用shell腳本讀取文件,shell腳本:從遠程
如何從另一臺服務器讀取文件([email protected]:/首頁/管理/數據),並將其存儲在「文件」陣列? (第四行代碼)
1 reportTypes=(0001 0102 8902)
2
3 # collect all files matching expression into an array
4 files=(Rep_[0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_[0-1].csv)
5
6 # take only the first hundred
7 files=("${files[@]:0:100}")
8
9 shopt -s nullglob # allow a glob to expand to zero arguments
10
11 # echo ${files[@]}
12
13 for i in ${reportTypes[@]}; do
14 printf -v val '%04d' "$i"
15 groupFiles=($(for j in ${files[@]} ; do echo $j ; done | grep ${val}))
16
17 # Generate sequence file for EACH Report Type
18 forqlift create --file="Report${val}.seq" "${groupFiles[@]}"
19 done
編輯:
我試圖與更換線4:但是當我生成hadoop的序列文件(使用forqlift
while IFS= read -rd '' file; do
files+=("$file")
done < <(ssh [email protected] "cd /home/admin/data && printf '%s\0' Rep_[0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_[0-1].csv")
,線18),它失敗了。
ERROR forqlift.ui.Driver - java.io.FileNotFoundException: Rep_0001_20150102_0.csv (No such file or directory)
什麼是你的問題?如果你想要匹配文件的名字而不是匹配文件的內容,'cat'肯定是錯誤的。 – tripleee
我的問題是如何從另一臺服務器讀取文件。我的腳本只在將它放在我的數據所在的同一個目錄中時才起作用。 – sophie
順便說一句,你應該引用擴展。 ''$ {reportTypes [@]}「',而不是空白'$ {reportTypes [@]}'。除非IFS被設置爲包含值中找到的數字的值,否則不會在這種特定情況下主動導致錯誤,但更好的方式是不會爲有史以來的錯誤導致額外的空間。 –