간단한 바이너리 파일을 텍스트 파일로 변환합니다.
od –t x1 Check.tar | cut –c8- > Check.txt
그 내용은 다음과 유사합니다:
64 65 76 2f 6e 75 6c 6c 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[...]
반대 접근 방식은 무엇입니까? Check.txt를 원본 파일로 Check.tar로 변환하는 것입니까?
답변1
od -An -vtx1 Check.tar > Check.txt
동일한 바이트 시퀀스가 필요 -v
하거나 압축할 것입니다.od
그 반대:
LC_ALL=C tr -cd 0-9a-fA-F < Check.txt | xxd -r -p > Check.tar
또는:
perl -ape '$_=pack "(H2)*", @F' Check.txt > Check.tar
ASCII 텍스트만 지원하는 채널을 통해 파일을 전송하려는 경우 다음과 같은 특수 도구를 사용할 수 있습니다 uuencode
.
tar cf - myfiles.* | xz | uuencode myfiles.tar.xz | that-channel
그리고 반대편에서 다음 파일을 복원합니다.
uudecode < file.uu
다시 생성됩니다 myfiles.tar.xz
.
또는:
uudecode -o - < file.uu | xz -d | tar xf -
파일 추출 중.
답변2
이 XY 질문의 X 부분에 답하려면 바이너리 파일 전송이 올바르게 전송되지 않는 이유를 조사하는 것이 좋습니다.
8비트 깨끗한 데이터 경로가 없기 때문에 그 이유가 밝혀지면 이 상황을 처리하기 위해 만들어진 기존 도구(예: )를 사용할 수 있습니다 base64
. uuencode
오래되었지만 여전히 매우 효과적입니다.
tar czvf - /etc/h* | base64 >/tmp/tar.tgz.b64
ls -l /tmp/tar.tgz.b64
-rw-r--r-- 1 root root 7364 May 26 11:52 /tmp/tar.tgz.b64
...
base64 -d /tmp/tar.tgz.b64 | tar tzvf -
또는
tar czvf - /etc/h* | uuencode - >/tmp/tar.tgz.uue
ls -l /tmp/tar.tgz.uue
-rw-r--r-- 1 root root 7530 May 26 11:51 /tmp/tar.tgz.uue
...
uudecode /tmp/tar.tgz.uue | tar xzvf -
답변3
제 경우에는 원격 장치에 xxd나 uudecode가 없지만 bash는 있습니다. 나는 다음과 같은 결과를 얻었습니다.
바이너리에서 txt로 변환:
od -An -vtx1 myfile.bin > myfile.txt
그런 다음 다음 명령을 사용하여 txt를 다시 바이너리로 변환합니다.
while read p; do
IFS=' ' read -r -a array <<< "$p"
for index in "${!array[@]}"
do
echo -en "\x${array[index]}"
done
done < myfile.txt > myfile.bin