It happens that one wants to send a set of files by e-mail and keep the folder structure of the files being sent. This can be the case for sending files containing code in some programming language with interdependencies or a website with html, css and js files.
Several tools can be used for such task (e.g. zip or tar), but there are e-mail services that block any attachment with binary files. This is common in some companies with the purpose of preventing viruses and malware from entering their network. In such cases tar or zip files would get blocked since they are binary.
It is possible to create plain text archive files using the
  Unix commands diff and patch. They are
  commonly used to apply changes made to a common file in
  different places. diff saves the differences
  between the original file and the modified one
  while patch applies the differences to files with
  the same contents than the original one (you can find a tutorial
  about diff and patch
  in
    this link). On windows you can get these commands
  with cygwin
  or mingw. They are also
  included in the bash console provided
  by git for windows.
To exemplify the procedure, let us create a new folder, with two files and a sub-folder containing a third file with some text on each. The following commands create this structure:
## Create folder and subfolder mkdir -p testfolder/subfolder ## Create text files echo "This is file 1" > testfolder/file1.txt echo "This is file 2" > testfolder/file2.txt echo "This is file 3" > testfolder/subfolder/file3.txt
The idea is for diff to give us the differences between and empty folder and the folder we just created. So, it is first necessary to create an empty folder.
mkdir testfolder_empty
Now we use diff to get the differences between the
  empty folder and the folder we want to archive. We store it in a
  file called testfolder.patch.
diff -Nru testfolder_empty testfolder > testfolder.patch
testfolder.patch is our archive file in plain
  text. In order to "unarchive" it, we put it in a folder that
  does not contain another folder with the
  name testfolder and run
patch -p0 < testfolder.patch
At this point a folder called testfolder should
  appear containing all the files and sub-folders from the original
  one.