2013-08-20 104 views
-1
for i in `cat ${DIR}/${INDICATOR_FLIST}` 
do 
X=`ls $i|wc -l` 
echo $X 
echo $X>>txt.txt 
done 

我有這樣的代碼來檢查,如果文件存在於一個目錄或不 但這不是工作,並給出錯誤是這樣的:在UNIX腳本循環不工作

not foundtage001/dev/BadFiles/RFM_DW/test_dir/sales_crdt/XYZ.txt 

你可以看到找不到和文件路徑之間沒有空格。

+0

你可以更具體一點你的意思是「Unix腳本」?你在用什麼shell,因爲我猜這是一個shell腳本? – arkascha

+0

'$ DIR'和'$ INDICATOR_FLIST'的值是什麼? 「貓」的論據是否存在?請包含此文件的示例。 – 2013-08-20 07:44:26

+0

文件'$ {INDICATOR_FLIST}'是否有機會來自Windows機器並且具有CRLF行尾?錯誤消息看起來好像可能是問題一樣混亂。 –

回答

0

也許您的文件的位置不正確。 拿這個例子

m:~ tr$ echo "1 2 3 4 5" > file.txt 
m:~ tr$ cat file.txt 
1 2 3 4 5 
m:~ tr$ for i in `cat file.txt`;do echo $i ;done 
1 
2 
3 
4 
5 
m:~ tr$ 

你可以寫前檔「爲」,也許檢查文件是否存在:

echo "location : ${DIR}/${INDICATOR_FLIST}" 
if [ -e ${DIR}/${INDICATOR_FLIST} ];then echo "file exists ";else echo "file was not found";fi 

for i in `cat ${DIR}/${INDICATOR_FLIST}`; 
do 
let "X=`ls $i|wc -l`"; 
echo $X; 
echo $X>>txt.txt; 
done 
+0

X ='ls file1.txt | wc -l' echo $ X給出1但這不適用於for循環,我已經試過了,它還有更多工作,但是我想用cat作爲文件lis很長。我的文件路徑是正確的,我已經測試過了。 –

+0

請發帖 –

+0

也注意X ='ls $ i | wc -l';不正確的工作,你應該嘗試讓「X ='ls $ i | wc -l'」 –

0

正確語法如下:

for i in `cat data-file` 
do 
    echo $I 
done 

,你是因此,問題必須在$DIR$INDICATOR_LIST的規範中,因此請仔細檢查文件的位置。

+0

因爲我在'更多的數據文件'... 正在工作,但爲什麼不貓 –

2
I have a code like this to check if file is present in a directory or not ... 

看來你正試圖從${DIR}/${INDICATOR_FLIST}讀取文件的列表,然後試圖確定這些實際存在。主要問題是:

  • 您試圖解析ls爲了判斷文件是否存在。

這就是你看到的那種輸出結果; stderrstdout的混合。如下所示,請使用test運算符。

下會給告訴你該文件是否存在:

while read line; do 
    [ -e "${line}" ] && echo "${line} exists" || echo "${line} does not exist"; 
done < ${DIR}/${INDICATOR_FLIST} 
1

您的文件${INDICATOR_FLIST}具有CRLF行結束符(DOS樣式)。你需要去除CR字符,因爲Unix約定是僅用於LF的行結束符。

你可以通過在行首開始打印「找不到」的方式來說明這一點。緊接着的前一個字符(文件名的最後一個字符)是一個CR,它將光標發送回行的開頭。

找到一個dos2unix實用程序,或者在其上運行tr -d \\015(這會刪除所有CR的不加區分)。