人が読めるファイルを探す

人が読めるファイルを探す

効率的な方法を見つけようとしています。OverTheWire Bandit Challenge レベル 5

とにかく複数のファイルがありますが、次の基準を満たすファイルは1つだけです。

  • 人が読める
  • サイズは1033バイトです。
  • 施行不可能

今、私は使用していますfind注文する。最後の2つの基準に一致するファイルを見つけることができます。

find . -size 1033c ! -executable

しかし、人間が読めないファイルを除外する方法がわかりません。この課題について私が見つけたソリューションは-readableテストパラメータを使用しますが、これがうまくいくとは思いません。-readable内容は表示されず、ファイルの権限のみが表示され、チャレンジの説明ではASCIIファイルまたは類似のファイルを要求します。

ベストアンサー1

はい、find正しいサイズの実行不可能なファイルを見つけて、fileASCIIをチェックするために使用できます。それは次のとおりです。

find . -type f -size 1033c ! -executable -exec file {} + | grep ASCII

しかし、問題は言葉ほど単純ではありません。 「人が読むことができる」というのは非常にあいまいな用語です。おそらくテキストを意味するようです。わかりました。しかし、どのような文字ですか?ラテン文字ASCIIのみですか?完全なUnicode?たとえば、次の3つのファイルを考えてみましょう。

$ cat file1
abcde
$ cat file2
αβγδε
$ cat file3
abcde
αβγδε
$ cat file4
#!/bin/sh
echo foo

これはテキストで読むことも、人間が読むこともできます。さて、fileそれが何であるかを見てみましょう:

$ file *
file1: ASCII text
file2: UTF-8 Unicode text
file3: UTF-8 Unicode text
file4: POSIX shell script, ASCII text executable

したがって、find上記のコマンドは検索のみを実行しますfile1(この例では、ファイルの長さが1033文字であると仮定します)。拡張してfind文字列を見つけることができますtext

find . -type f -size 1033c ! -executable -exec file {} + | grep -w text

を使用すると、-w独立した単語で見つかった行のみが印刷されますgreptextそれしなければならない目的とほぼ同じですが、説明に文字列を含めることができる他のファイル形式がないことを保証することはできませんtext

おすすめ記事