Busybox では、多数のディレクトリを再帰的に多数のファイル内で表現を検索するにはどうすればよいでしょうか。ただし、テキスト ファイルのみを検索するにはどうすればよいでしょうか。
ファイルのサフィックスがどうなるかはわかりません。.sh になるかもしれませんし、何もないかもしれませんし、何か他のものになるかもしれません。エンコードが何になるかもよくわかりませんが、エンコードに基づいて検索することを検討していました。
試してみましたbusybox grep -r
が、バイナリファイルも検索されてしまい、多くの時間を無駄にしてしまいます。
答え1
grep
は、バイナリ ファイルを、または--binary-files
として扱うオプションをサポートしています。最後のオプションはバイナリ ファイルをスキップします。これは と同等です。テストを実行したところ、Busybox はバイナリ ファイルのスキップをサポートしているようです。binary
text
without-match
grep -I
grep
-I
grep
は、ファイルがバイナリかテキストかを判断する際に「魔法」のようなことは行いません。単に最初の数バイトをチェックして、それがテキストであるかどうかを確認し、ファイルの残りの部分についても同様であると想定します ( によるman grep
)。
補足: これをエミュレートするには、たとえば、head -1 myfile
ファイルの が と等しいかどうかを比較しますhead -1 myfile | strings
。file
が使用可能な場合はさらに依存しますが、Busybox には存在せず、Busybox が主に使用されている場合はシステム上に存在しない可能性が高くなります。
答え2
構造体を持つバイナリファイルとの違いは何ですか?
struct MyBin
{
byte a;
byte b;
byte c;
}
価値観とともに
myBin.a = 70;
myBin.b = 111;
myBin.c = 111;
そしてテキストを含むテキストファイルFoo
?
テキスト ファイルは、文字エンコーディング (ASCII、UTF-8 など) と呼ばれる特別な検索コードを使用して解釈するバイナリ ファイルです。したがって、「バイナリ ファイル」と「テキスト ファイル」を簡単に区別する方法はありません。
実行ビットが設定されているファイルを除外したり、ファイル サイズ以下のファイルのみを検索したりする方法があるかもしれませんが (テキスト ファイルが 1 MB を超えるとは思えません)、grep の結果をフィルター処理する方法について十分な知識がないため、その方法の例を示すことができません。