find . -type f | xargs file | grep text | cut -d':' -f1 | xargs grep -l "TEXTSEARCH" {}
Run Code Online (Sandbox Code Playgroud)
这是一个很好的解决方案?仅在文本文件中递归查找TEXTSEARCH
我试图将iconv指向一个目录,所有文件都将转换为UTF-8,无论当前编码如何
我正在使用此脚本,但您必须指定要进行的编码.如何让它自动检测当前编码?
dir_iconv.sh
#!/bin/bash
ICONVBIN='/usr/bin/iconv' # path to iconv binary
if [ $# -lt 3 ]
then
echo "$0 dir from_charset to_charset"
exit
fi
for f in $1/*
do
if test -f $f
then
echo -e "\nConverting $f"
/bin/mv $f $f.old
$ICONVBIN -f $2 -t $3 $f.old > $f
else
echo -e "\nSkipping $f - not a regular file";
fi
done
Run Code Online (Sandbox Code Playgroud)
终点线
sudo convert/dir_iconv.sh convert/books CURRENT_ENCODING utf8
Run Code Online (Sandbox Code Playgroud) 这个问题类似于解决隐藏的文件类型.我正在努力解决类似的问题,因为我只需要处理包含文件的文本,这些文件包含许多不同的文件类型 - 图片,文本,音乐.我正在使用os.walk列出所有内容,包括没有类似扩展名的Icon文件的文件.我正在使用linux,并且只满足于过滤txt文件.一种方法是检查文件扩展名,这篇文章很好地解释了它是如何完成的.
但这仍然留下错误标记的文件或没有扩展名的文件.有十六进制值可以唯一标识称为幻数或文件签名的文件类型.这里和这里 不幸的是,文本文件不存在幻数(见这里).
我提出的一个策略是解析第一堆字符,通过字典查找确保它们是单词(我只处理英文文本)然后只进行全文处理,如果这是真的.这个方法似乎相当沉重和昂贵(为每个文件做一堆字典查找).另一种方法是简单地寻找在数据文件中不太常见但在文本文件中常见的单词"the".但是漏报会导致我丢失要处理的文本文件.我试过要求谷歌提供最长的文字而没有"the"这个词,但没有运气.
我不知道这是否是适合这类问题的论坛 - 这几乎是人工智能而不是计算机科学/编码的问题.它并不像乱码检测那么困难.这些文本可能在语义上或语法上都不正确 - 它们可能只是像库房的库存那样的文字,但也可能是散文和诗歌.我只是不想处理可能是字节代码,源代码或不是英文单词的字母数字字符集的文件.