.png)
フォルダ内のすべてのテキストファイルをmimetypeで一覧表示できます。
find . -type f -print0 | xargs -0 file -i | fgrep -i text | sed 's/:$//g' 2>/dev/null | awk 'BEGIN {FS=": "} {print $1}'
わかりましたが、このファイルから「STRING」を検索するために「fgrep」をどのように追加しますか(正規表現は必要ありません。これがfgrepの理由です)。
これは悪いです:
fgrep -iR "STRING" *
ISOファイル、バイナリファイルの検索を開始するため...
Fedora14/bash。
答え1
最初、::マニュアルページに記載されているように、grep
スイッチを使用してバイナリを検索しないように指定できます。-I
-I Process a binary file as if it did not contain matching data; this is equivalent to the --binary-files=without-match option.
第二、the find
:xargs、および多くのパイプの使用を避けるために、手続き型-exec
テストを使用してくださいfind
。以下を使用して、論理テストシーケンスを簡単に作成できます。-exec
各連続テストの連続実行もし前のコマンドはすべて0(成功的に完了)を返します。
答え2
@rozcietrzewiaczの解決策は良い解決策ですが、それでもテキストファイル(から返される)を維持したい場合は、ファイル名のfile
配列を慎重に構築してからその配列grep
からコマンドを実行できます。
私は次のようなことをしたいと思います。
- ファイル名がない場合は改行文字があります(ただし空白がある可能性があります)。
file
サポートとオプションの-0
ためのユーティリティ-i
\x
GNU sedまたは10進文字コードをサポートするsed。
これは例です
#!/bin/bash
get_file_list() {
local path="$1"
find "$path" -type f -exec file -0i {} + |
sed -n '/\x00 *text\//s/\x00.*//p'
}
list=()
while IFS= read -r line; do
list+=("$line")
done < <(get_file_list .)
# to choose options and pattern
grep -i pattern "${list[@]}"
このコマンドは、ファイル名、NULバイト、およびMIMEタイプで構成されるsed
一連のテキスト行を取得します。file
2番目の部分(NULの後)に単語が含まれている場合は、text/
その部分を削除してファイル名のみを印刷します。それ以外の場合は何も印刷されません。