ファイル拡張子のないデータファイルを見つけました。 file
コマンドは、それがdata file (application/octet-stream)
であることを示しています。 hd
コマンドは、最終行にGNP。を示します。したがって、このファイルを元に戻すと、。PNG形式のファイルが表示され、どこでも検索しましたが、バイナリファイルの内容を元に戻す方法を説明する解決策が見つかりませんでした。
xxd
(from vim
)およびtac
(from GNU coreutils、from tail -r
一部のシステムでは):
< file.gnp xxd -p -c1 | tac | xxd -p -r > file.png
Perl
の場合:
<file.gnp Perl -0777 -F -ape '$_=reverse@F' > file.png
-a
:awk
モードはレコードがフィールドに分割されました-0777 -p
:スラップモード、1つに読み込まれたファイル$_
レコード、変更されたレコードは後で印刷されます。-F
:フィールド区切り文字が空なので、フィールドは個々のバイトです$_=reverse@F
:出力レコードは、フィールドのリストを連結したものです(@F
)逆。zsh
で(バイナリデータを内部的に処理できる唯一のシェル(考慮したくない場合は ksh93のbase64エンコーディングアプローチ )):
zmodload zsh/mapfile
(LC_ALL=C; printf %s ${(s::Oa)mapfile[file.gnp]} > file.png)
LC_ALL=C
:文字はバイトです$mapfile[file.gnp]
: の内容 file.gnp
ファイルs::
:文字列をバイト構成要素に分割しますOa
:配列O
rrayの逆a
rder配列これは、ksh93
を使用してバイナリファイルを元に戻す1つの方法です。わかりやすくするために、コードを「緩い」ままにしました。
#!/bin/ksh93
typeset -b byte
redirect 3< image.gpj || exit 1
eof=$(3<#((EOF)))
read -r -u 3 -N 1 byte
printf "%B" byte > image.jpg
3<#((CUR - 1))
while (( $(3<#) > 0 ))
do
read -r -u 3 -N 1 byte
printf "%B" byte >> image.jpg
3<#((CUR - 2))
done
read -r -u 3 -N 1 byte
printf "%B" byte >> image.jpg
redirect 3<&- || echo 'cannot close FD 3'
exit 0
Perlの場合:
Perl -0777pe '$_=reverse $_' [input_file]
性能試験:
dd if=/dev/urandom of=/tmp/a bs=1M count=1
LC_ALL=C tac -rs $'.\\|\n' /tmp/a > /tmp/r
time Perl -0777pe '$_=reverse $_' /tmp/a | diff -q - /tmp/r
time xxd -p -c1 /tmp/a | tac | xxd -p -r | diff -q - /tmp/r
time Perl -0777 -F -ape '$_=reverse@F' /tmp/a | diff -q - /tmp/r
time LC_ALL=C tac -rs $'.\\|\n' /tmp/a | diff -q - /tmp/r
結果:
Perl -0777 -F
が最も遅いです。xxd
が最も遅くなります。注:diff
の実行時間は、出力が同じであるため、すべてのソリューションで同じである必要があります。
私は以下を試しました:
tac -rs '.' input.gnp > output.png
アイデアは、セパレータとして任意の文字を使用して「tac」を強制することです。バイナリファイルで試してみましたが、問題はないようですが、確認をお願いします。
主な利点は、メモリにファイルをロードしないことです。
これはうまくいくようです:
tac -r -s '.*' foo > oof
すべての可能なバイトで256バイトのファイルを作成してテストし、それを逆にします。
printf '%.2x\n' {0..255} | xxd -r -p | tac -r -s '.*' |
od -A none -t u1 | tee >(head -1 > /dev/stderr) |
{ sleep 1; echo ...; tail -1 ; }
出力:
255 254 253 252 251 250 249 248 247 246 245 244 243 242 241 240
...
15 14 13 12 10 11 9 8 7 6 5 4 3 2 1 0
...
、(i.e。 more of the same)の内容を確認するには、| tee
以降のすべてを省略します。