Linuxマシンで、ファイル拡張子の制約なしに人間が読めるファイルを見つけたいのですが。これらのファイルは、テキスト、構成、html、ソースコードなどの人間が感知するファイルである必要があります。フィルタリングして見つける方法を提案していただけますか。
ここであなたの友達を見つけてファイルしてください:
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 を参照してください。
どうですか
find /dir/to/search -type f | xargs file | grep text
find
はファイルのリストを提供します。
xargs file
は、パイプ入力からの各行でfile
コマンドを実行します。