web-dev-qa-db-ja.com

UNIXで人間が読めるファイルを見つける

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

6
Yiğit

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

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 file を参照してください。

7
peteches

どうですか

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

findはファイルのリストを提供します。

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

15
Blam