2012-01-15 35 views
0

我想將文件夾中所有文件的文件類型寫入文件。將所有文件類型寫入文件 - ubuntu

所以這是我做過什麼

for xfile in *.* 
do 
file "x$file" > values  
done 

但我的運氣不好它沒有運行。和錯誤消息是

: command not found 
'/check.sh: line 3: syntax error near unexpected token `do 
'/check.sh: line 3: `do 

可能有人請幫助我渡過這個?

回答

5

首先,你變量xfile但你嘗試使用變量file由字面x之前。我認爲x$file應該是$xfile

其次,您對每個文件執行file命令並每次覆蓋values文件,這意味着只顯示最後一個文件。您可以通過預先刪除文件並使用>>(附加)而不是>(覆蓋)來解決此問題。

第三,file命令是完全能夠處理多個參數,以便你真的只需要:

file * >values 

也使用*因爲*.*是一個Windows/DOS的thingie - 如果你想基於UNIX下的所有文件像操作系統一樣,*是正確的表單(或.*以及如果你想隱藏文件)。


最後,沒有這些建議以上將解決您的實際問題,這幾乎肯定是DOS風格的行結束在你的文件存在。該錯誤消息與您在此案例中看到的完全匹配的完美

在我的系統上,當我輸入DOS行結尾的腳本時,我得到相同的錯誤信息(主要是)。

如果你做一個od -xcb check.sh,你很可能會看到類似這樣的:

0000020 0a0d 6f64 0a0d 6966 656c 2220 7824 6966 
     \r \n d o \r \n f i l e  " $ x f i 
     015 012 144 157 015 012 146 151 154 145 040 042 044 170 146 151 

\r字符顯示不正確的行結尾。

您可以使用自己喜歡的(像樣的)編輯器來查看和刪除這些或簡單地用apt-get安裝dos2unix(雖然你可能已經有此),並做到:

# sudo apt-get install dos2unix ## only if you don't have it already. 
dos2unix check.sh >check2.sh 

,然後使用check2.sh

雖然,記住,單行:

file * >values 

仍然比for環一個更好的選擇(但你還是要確保你使用UNIX行尾)。

+0

哇謝謝paxdiablo – klijo 2012-01-15 14:48:39

+0

很好的回答! +1 – 2012-01-15 19:17:59