[problem]
You have a shell open on two UNIX boxes, but scp, ftp, etc, etc is locked down?
Well they left Perl!!! 🙂
[/problem]
[solution]
I recognise this could be messy for massive files – but it works beautifully on binaries, images, etc.
I am demo’ing it here on tar gzipped output. It produces some errors, but still recreates the files.
[/solution]
[example]
$ find test -type f -exec sum {} ; -ls
11171 18
294632 20 -rwxr--r-- 1 marcus marcus 17461 Feb 15 21:49 test/testA/mun-weir.jpg
28913 19
294633 20 -rw-r--r-- 1 marcus marcus 18505 Feb 15 21:49 test/testB/perth-swan-river.jpg
tar zcvf - test | perl -MMIME::Base64 -e 'while() {
$str.=(encode_base64($_)); } print "$strn";'
This produces a listing of the files/dirs and then starting from H4, the actual text version of the binary output. I have truncated this – as it gets quite big. You can redirect this into a file, if using cygwin – then just open it with wordpad.
test/
test/testA/
test/testA/mun-weir.jpg
test/testB/
test/testB/perth-swan-river.jpg
H4sIAGVX1EUAA+z8BWxlwfMuBl6PmZnZvmYaMzMzMzMzMzMz22P7mpnZ4zHD2B4zM+OYGXZ+/5dk
k0hRFCl5u6t9daVzjlTd1V931anuOlf63Mxd3ZgA/8/K93/Cyc7+nzsrJwvz//r+PwuA+Ts7B/t3
dlZWFk7Ad2ZmNmZmAAn7/8O4/kvcXd2MXUhIAPbGLqburv/H7f7P9P8/Km7/8f9/LsL/z0XB/yX/
s7P+8z8LG+f3/+H//x7yv/K/vbsDg6e5tQujjZPl/61j/Jf/2dj+D/zPxvKdg/1/5382TjZ2AMn3
/1tR/B/I/5/7/2vlaweAIiMhLQEAAwMDSP37Ab52AVjiXtYWAIC8PID2XyOY/6ntOkAUAAkOAQEB
DvnvAgkJCQWNAAP9T5Dh4WERUJHR0FCRUVHRsQiw0THwMFFRcUhx8AgJiYmJ0bHJgGREQAIiYqL/
GAH71xUaCg==
GgkGBokIAxWD6P+yfPUDUGEAYWD34GBkgG+oYOCoYF9DAMJ/GKH/M4v/t3wDh/gHEgwG9p9aHgXw
…
First we paste it into tar.uu – which could be anything or you can just do cat | perl and paste to stdin.
[marcus@zion ~]$ cat tar.uu | perl -MMIME::Base64 -e 'while() { $str.=(decode_base64($_)); } print "$strn";' | tar zxvf -
gzip: stdin: decompression OK, trailing garbage ignored
test/
test/testA/
test/testA/mun-weir.jpg
test/testB/
test/testB/perth-swan-river.jpg
tar: Child returned status 2
tar: Error exit delayed from previous errors
As you can see produces a bit of garbage.
[marcus@zion ~]$ find test -type f -exec sum {} ; -ls
28913 19
1555 24 -rw-r--r-- 1 marcus adm 18505 Feb 15 21:49 test/testB/perth-swan-river.jpg
11171 18
1553 24 -rwxr--r-- 1 marcus adm 17461 Feb 15 21:49 test/testA/mun-weir.jpg
And you are done. 🙂
[/example]
[reference]
[tags]cut and paste binary files, base64, Unix Coding School[/tags]
[/reference]