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
patch. They are
commonly used to apply changes made to a common file in
diff saves the differences
between the original file and the modified one
patch applies the differences to files with
the same contents than the original one (you can find a tutorial
this link). On windows you can get these commands
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.
Now we use
diff to get the differences between the
empty folder and the folder we want to archive. We store it in a
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
testfolder and run
patch -p0 < testfolder.patch
At this point a folder called
appear containing all the files and sub-folders from the original