Whatever you do, it's your decision and you do it on your own risk! I am not responsible for bricks, any kind of damages, data loss or any other unwanted result! Everything you do is done on YOUR OWN RESPONSIBILITY! And I am also not responsible if you lose the chat with your crush.
So here is how you do it (on linux using bash):
Reboot your phone into TWRP, connect your device to your computer, and run the following command:
adb shell mkfifo /bk.pipe && adb exec-out 'tar -cvap data/media/0 2>/bk.pipe' | dd of=sdcard.tar & adb shell cat /bk.pipe &
Compression is done automatically and you will get a nice output on your terminal on which file is being backed up currently.
When everything is finished you should get a message similar to this on your terminal:
79692237+2 records in 79692238+0 records out 40802425856 bytes (41 GB, 38 GiB) copied, 3550,38 s, 11,5 MB/s
When you get that, it means that your backup has finished and you can safely remove the usb cable.
Note that you can do this with any directory on your device, so if you desire to back up /data, just write data instead of data/media/0.
Example of the resulting sdcard.tar file (opened on my computer):
Decompressing your data directly to your device might get a little trickier:
adb shell mkfifo /rst.pipe && adb push sdcard.tar /rst.pipe & adb shell 'cd /; cat /rst.pipe | tar -xv'
adb push sdcard.tar /sdcard/sdcard.tar adb shell 'cd /; tar -xvf /sdcard/sdcard.tar'
tar to pipe but keep -v verbose output separate from STDERR
Transferring binary data over ADB shell (ie fast file transfer using tar)
Compose and pipe a gzipped tar archive in one go
Bash tar and output to log file
Encrypting and Compressing
How encrypt data/text stream instead of a file?
Post on my blog:
How to backup compressed data from your android device to your computer