10

Linuxマシンで、ファイル拡張子の制約なしに人間が読める形式のファイルを見つけたいのですが。これらのファイルは、テキスト、構成、HTML、ソースコードなどの人間が感知するファイルである必要があります。フィルタリングして見つける方法はありますか?

4

3 に答える 3

23

使用する:

find /dir/to/search -type f | xargs file | grep text

findファイルのリストが表示されます。

xargs filefileパイプ入力からの各行でコマンドを実行します。

于 2016-02-03T15:47:29.307 に答える
7

ここであなたの友達を見つけファイルしてください:

find /dir/to/search -type f -exec sh -c 'file -b {} | grep text &>/dev/null' \; -print

これにより、 / dir / to / search内のすべてのファイルが検索され(注:シンボリックリンクディレクトリソケットなどは検索されず、通常のファイルのみが検索されます)、sh -c'file -b{}|を実行します。grepテキスト&> / dev / null'; これはファイルのタイプを調べ、説明内のテキストを探します。これがtrueを返す場合(つまり、テキストが行にある場合)、ファイル名を出力します。

注:ファイルに-bフラグを使用すると、ファイル名が出力されないため、 grepで問題が発生することはありません。たとえば、-bフラグがないと、バイナリファイルのgettextが誤ってテキストファイルとして検出されます。

例えば、

root@osdevel-pete# find /bin -exec sh -c 'file -b {} |  grep text &>/dev/null' \; -print
/bin/gunzip
/bin/svnshell.sh
/bin/unicode_stop
/bin/unicode_start
/bin/zcat
/bin/redhat_lsb_init
root@osdevel-pete# find /bin -type f -name *text*
/bin/gettext

圧縮ファイルを調べたい場合は、--uncompressフラグを使用してファイルします。ファイルの詳細とフラグについては、manファイルを参照してください。

于 2013-01-24T16:06:53.120 に答える
0

これも正常に機能するはずです。

file_info=`file "$file_name"` # First reading the file info string which should have the words "ASCII" or "Unicode" if it's a readable file

if grep -q -i -e "ASCII" -e "Unicode"<<< "$file_info"; then
    echo "file is readable"
fi
于 2020-03-07T09:37:08.233 に答える