2016-03-31 16 views
0

特定のフォルダからASCIIテキストのファイルのすべてのファイル名をソートして出力する必要があります。 これまでに作ったのですが、ファイル名がPNG画像であっても印刷されます。ファイルタイプがbashのASCIIテキストであるかどうかを確認

#!/bin/bash 

for f in $1/* 
do 
nume=$(basename $f) 

if [ 'file $nume'=="$1/$nume: ASCII text" ]; then 
    echo $nume 
fi 
done 

誰かが私のコードに間違っていることを説明できますか?

+1

をあなたは、なぜ、 '$理解しています(...) 'は' basename'を実行するために使われますか?同じ理由が 'file'の実行にも当てはまります。 – chepner

答えて

3
  1. [はちょうど等号ではなく、2を望んでいる、それが(help testを参照)スペースで区切っする必要があります

    [ 'file $nume' = "$1/$nume: ASCII text" ] 
    
  2. あなたは、コマンドからの出力を得るために$(...)が必要になります。

    [ "$(file $nume)" = "$1/$nume: ASCII text" ] 
    
  3. なぜbasenameを使用していますか? fileは、あなたがそれを全体のパスを与えていない場合は、あなたのファイルを見つけるつもりされていません。

    for f in $1/* 
    do 
        if [ "$(file $f)" = "$f: ASCII text" ]; then 
         echo $f 
        fi 
    done 
    
  4. は常にあなたの拡張を引用します。あなたの頭痛の多くを保存することができます引用:個人的に

    for f in "$1"/* 
    do 
        if [ "$(file "$f")" = "$f: ASCII text" ]; then 
         echo "$f" 
        fi 
    done 
    
  5. (オプション)を、私は[[と正規表現のマッチングを利用したい:

    if [[ "$(file "$f")" =~ ': ASCII text'$ ]]; then 
    
+0

私は 'case $(file" $ f ")を* textに利用したいと思います。 *)テキストに一致するエコーはありません。エサック; - )空白を含むfileNameであっても、 '$(file" $ f ")'の出力全体ではなく、 "$ f"をdbl-quoteするだけでよいことに注意してください。皆さんお元気で。 – shellter

関連する問題