寻找带有BOM的UTF-8文件的优雅方法?

106

出于调试目的,我需要递归搜索一个目录下以UTF-8字节顺序标记(BOM)开头的所有文件。 我当前的解决方案是一个简单的shell脚本:

find -type f |
while read file
do
    if [ "`head -c 3 -- "$file"`" == $'\xef\xbb\xbf' ]
    then
        echo "found BOM in: $file"
    fi
done

或者,如果您更喜欢简短的、难以阅读的单行代码:

find -type f|while read file;do [ "`head -c3 -- "$file"`" == $'\xef\xbb\xbf' ] && echo "found BOM in: $file";done

该功能不能处理包含换行符的文件名,但是这样的文件通常不会出现。

是否有更短或更优雅的解决方案?

是否有任何有趣的文本编辑器或文本编辑器宏?

11个回答

1
如果您正在寻找UTF文件,则file命令可以使用。它会告诉您文件的编码方式。如果有任何非ASCII字符,它将显示为UTF。
file *.php | grep UTF

不过这种方法无法递归地工作。你可能可以编写一些高级命令来使其递归,但我只是像以下这样单独搜索每个层级,直到没有层级为止。

file */*.php | grep UTF

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接