Chuyển đổi chế độ nhị phân sang chế độ văn bản và tùy chọn đảo ngược


7

Bằng cách sau, tôi chuyển đổi một tệp nhị phân đơn giản thành một tệp văn bản

od –t x1 Check.tar | cut –c8- > Check.txt

Cung cấp một nội dung tương tự như:

 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
 [...]

Cách ngược lại để chuyển đổi Check.txt thành Check.tar là tệp gốc


1
Có lẽxxd -r -p Check.txt > Check.tar
cuonglm

tập tin văn bản vẫn không hoạt động
maihabunash

Điều gì khiến bạn tin rằng nó vẫn là một tệp văn bản? xxd -r -plà đảo ngược chính xác của odchuyển đổi bạn đã làm; đầu ra của lệnh cuonglm phải hoàn toàn giống với tarball ban đầu.
Stephen Kitt

xxd -r -p Check.txt> Check.tar ..... tập tin Check.tar Check.tar: văn bản ascii
maihabunash

Tôi cũng thử điều này - tar xvf Check.tar tar: thư mục tổng kiểm tra lỗi
maihabunash

Câu trả lời:


9
od -An -vtx1 Check.tar > Check.txt

Bạn cần -vhoặc odsẽ ngưng tụ chuỗi byte giống hệt nhau.

Đối với ngược lại:

LC_ALL=C tr -cd 0-9a-fA-F < Check.txt | xxd -r -p > Check.tar

Hoặc là:

perl -ape '$_=pack "(H2)*", @F' Check.txt > Check.tar

Nếu mục đích của bạn là chuyển các tệp qua kênh chỉ hỗ trợ văn bản ASCII, thì có các công cụ dành riêng cho việc đó như uuencode:

tar cf - myfiles.* | xz | uuencode myfiles.tar.xz | that-channel 

Và để phục hồi các tập tin ở đầu bên kia:

uudecode < file.uu

sẽ tái tạo myfiles.tar.xz.

Hoặc là:

uudecode -o - < file.uu | xz -d | tar xf -

Để giải nén các tập tin.


đầu tiên sox cho câu trả lời, nhưng tôi cần tạo tập tin file.tar, làm thế nào để làm điều đó?
maihabunash

@maihabunash Nếu bạn đã tạo file.txt mà không có -v và với việc xóa địa chỉ, thì bạn không thể khôi phục tập tin một cách đáng tin cậy nếu có các chuỗi cô đặc (thực hiện grep '[*]' file.txtđể kiểm tra) vì bạn đã mất thông tin về thời gian ngưng tụ trong bao lâu trình tự là bằng cách loại bỏ địa chỉ.
Stéphane Chazelas

xin chào, mục tiêu của tôi là nén hơn 30 tập lệnh perl bằng tar hoặc zip hoặc bất cứ điều gì sau đó chuyển đổi nó thành văn bản và sau đó chuyển đổi nó trở lại tập tin nén, điều đó có thể không? (Tôi thấy tar là vấn đề nhưng chúng ta có thể làm điều đó với các tùy chọn khác không)
maihabunash

hoặc có thể có nhiều tùy chọn hơn, ví dụ để nén 30 tập lệnh nhưng dưới dạng ascii hoặc chế độ văn bản, tôi cần điều đó bởi vì khi tôi sao chép từ máy này sang máy khác vì lý do không rõ ràng các tệp nhị phân là thay đổi (chksum) chứ không phải tệp ascii
maihabunash

1
@maihabunash, bạn đang tìm mã hóa uuencode hoặc base64. Lưu ý rằng câu trả lời của tôi bao gồm câu hỏi của bạn. Tôi cung cấp mã để chuyển đổi trở lại nhị phân từ đầu ra od với điều kiện bạn không quên -vtùy chọn. Nếu bạn đang truyền tệp qua FTP, đừng quên đặt chế độ thành "nhị phân" ( TYPE Ilệnh FTP, giống như binarytrong ứng dụng khách của bạn)
Stéphane Chazelas

4

Trả lời phần X của vấn đề XY này, tôi khuyên bạn nên điều tra lý do chuyển tệp nhị phân của bạn không chuyển đúng.

Nếu lý do là vì bạn không có cơ sở dữ liệu sạch 8 bit, thì bạn có thể sử dụng các công cụ hiện có được tạo để xử lý tình huống này, chẳng hạn như base64hoặc thậm chí uuencode. Cũ nhưng vẫn rất hiệu quả.

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 -

hoặc là

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 -

Upvote +1 cho bạn thx
maihabunash

+1 để đề xuất cơ sở64, hoạt động trên bản cài đặt cygwin tương đối mới của tôi.
mwfearnley

2

Trong trường hợp của tôi, tôi không có xxd hoặc uudecode trên thiết bị từ xa nhưng tôi đã có bash. Tôi đã kết thúc với những điều sau đây:

Chuyển đổi từ nhị phân sang txt với:

od -An -vtx1 myfile.bin > myfile.txt

Sau đó chuyển đổi lại từ txt sang nhị phân với:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.