web-dev-qa-db-ja.com

application / octet-stream MIMEタイプのバイナリ.logファイルを表示するにはどうすればよいですか?

デバッグ目的で特定の文字列を検索するログファイルをサーバーからダウンロードしました。すべての拡張子は.logです。

問題は、1つのファイルにはplain text document (text/plain) mimeタイプがあり、もう1つのファイルにはBinary (application/octet-stream) mimeタイプがあることです。

テキストエディターでplain text document (text/plain) mimeタイプのログファイルをプレーンテキストとして開くことができますが、もう1つはバイナリであるため開けません。

application/octet-stream MIMEタイプのバイナリ.logファイルを表示するにはどうすればよいですか?

enter image description here

2
Parto

これから answer in grepがファイルをバイナリと見なす理由

ファイル内のどこかにNUL文字がある場合、grepはそれをバイナリファイルと見なします。

このcat file | tr -d '\000' | yourgrepのような回避策があり、最初にすべてのヌルを削除してから、ファイルを検索します。


私は最初にテストディレクトリの1つのファイルでそれを試しました:

parto@subroot:~/Desktop/test$ ls
info_pdslpostpaid.log-20160518
parto@subroot:~/Desktop/test$ cat info_pdslpostpaid.log-20160518 | tr -d '\000' > info_pdslpostpaid.log-20160518_edited
parto@subroot:~/Desktop/test$ ls
info_pdslpostpaid.log-20160518  info_pdslpostpaid.log-20160518_edited
parto@subroot:~/Desktop/test$

結果は、plain text document (text/plain)テキストMIMEファイルです。

enter image description here

次に、複数のファイルを操作しているため、ディレクトリ内の複数のファイルに対して同じコマンドを実行しようとしました。

parto@subroot:~/Desktop/test$ ls
info_pdslpostpaid.log-20160518  info_pdslpostpaid.log-20160520  info_pdslpostpaid.log-20160523  info_pdslpostpaid.log-20160525
parto@subroot:~/Desktop/test$ for i in * ; do cat "$i" | tr -d '\000' > "${i}_edited" ; done
parto@subroot:~/Desktop/test$ ls
info_pdslpostpaid.log-20160518         info_pdslpostpaid.log-20160520_edited  info_pdslpostpaid.log-20160525
info_pdslpostpaid.log-20160518_edited  info_pdslpostpaid.log-20160523         info_pdslpostpaid.log-20160525_edited
info_pdslpostpaid.log-20160520         info_pdslpostpaid.log-20160523_edited
parto@subroot:~/Desktop/test$

そしてすごい、すべてのログファイルが読み取り可能な形式になりました!! :)

3
Parto

あなた自身の答えに基づいて、ファイルのMIMEタイプを変更するのではなく、grepを使用してファイルを検索することを具体的に参照しているようです- What XY問題?

grepが単にnullバイトに基づいてファイルを誤認している場合は、-aまたは--binary-files=textオプションを使用して、マニュアルページで説明されているように、grepに関係なくテキストとして扱うように指示できます。

-a, --text
       Process  a binary file as if it were text; this is equivalent to
       the --binary-files=text option.

--binary-files=TYPE
       If the first few bytes of a file indicate that the file contains
       binary  data, assume that the file is of type TYPE.  By default,
       TYPE is binary, and grep  normally  outputs  either  a  one-line
       message  saying  that  a  binary  file matches, or no message if
       there is no match.  If TYPE is without-match, grep assumes  that
       a  binary  file  does  not  match;  this is equivalent to the -I
       option.  If TYPE is text, grep processes a binary file as if  it
       were  text;  this is equivalent to the -a option.  Warning: grep
       --binary-files=text might output binary garbage, which can  have
       nasty  side  effects  if  the  output  is  a terminal and if the
       terminal driver interprets some of it as commands.
2
steeldriver