确定bash中的文件类型是否为ASCII文本

时间:2016-03-31 16:40:29

标签: bash ascii file-type

我必须对给定文件夹中ASCII文本的文件的所有文件名进行排序和打印。 到目前为止,我做了这个,但即使它们是PNG图像,也会打印文件名。

#!/bin/bash

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

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

有人可以解释我的代码有什么问题吗?

1 个答案:

答案 0 :(得分:3)

  1. [只需要一个等号,而不是两个,并且需要用空格分隔(参见help test):

    [ 'file $nume' = "$1/$nume: ASCII text" ]
    
  2. 您需要$(...)来获取命令的输出:

    [ "$(file $nume)" = "$1/$nume: ASCII text" ]
    
  3. 您为什么使用basenamefile如果不给出完整的路径,则无法找到您的文件:

    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