2012-01-15 6 views
0

フォルダ内のすべてのファイルのファイルタイプをファイルに書きたい。すべてのファイルタイプをファイルに書き込む - ubuntu

だから、これは私が

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

しかし、それは実行didntの私の不運のためにやったことです。エラーメッセージは

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

誰かが私を助けてくれますか?

答えて

5

はまず、あなたの変数xfileですが、リテラルxが先行変数fileを使用しようとします。 x$file$xfileになるはずです。

第2に、ファイルごとにfileコマンドを実行し、毎回valuesファイルを上書きすると、最後のファイルのみが表示されます。これを修正するには、先にファイルを削除し、>(上書き)の代わりに>>(追加)を使用します。あなたが本当に唯一必要なので

第三に、fileコマンドが複数の引数を処理する完全に可能である。また、使用しています

file * >values 

**.*はWindows/DOSのthingieがある - あなたは、UNIXの下にあるすべてのファイルをしたい場合*は正しい形式です(隠しファイルが必要な場合は.*も同様です)。


そして最後に、上記のこれらの提案はいずれもほぼ確実にあなたのファイルにDOS形式の行末の存在であるあなたの実際問題は、解決しません。そのエラーメッセージはの完全なに該当します。

私のシステムでは、DOSの行末でスクリプトを入力すると、ほとんど同じエラーメッセージが表示されます。間違った行末を示す\r文字で

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 

:あなたがod -xcb check.shを行う場合

、あなたが最も可能性が高いようなものが表示されます。

あなたが閲覧し、これらを削除するか(あなたはこれをすでに持っているかもしれませんが)単にapt-getdos2unixをインストールするには、お気に入りの(まともな)エディタを使用することができますし、実行します。

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

、その後check2.shを使用します。シングルライン、覚えておいて、けれども

file * >values 

は(しかし、あなたはまだあなたがUNIXの行末を使用していることを確認したいと思う)まだforループより良いオプションです。

+0

wow thanks paxdiablo – klijo

+0

偉大な答え! +1 –

関連する問題