My bash fu is not what it should be.
I want to create a little batch script which will copy a list of directories into a new zip file.
There are (at least) t
You can export a variable like DIRECTORIES="DIR1 DIR2 DIR3 ...." And in the script you need to use the variable like tar czvf $DIRECTORIES
You can create a gzipped tar on the commandline as follows:
tar czvf mytar.tar.gz dir1 dir2 .. dirN
If you wanted to do that in a bash script and pass the directories as arguments to the script, those arguments would end up in $@
. So then you have:
tar czvf mytar.tar.gz "$@"
If that is in a script (lets say myscript.sh
), you would call that as:
./myscript.sh dir1 dir2 .. dirN
If you want to read from a list (your option 1) you could do that like so (this does not work if there is whitespace in directory names):
tar czvf mytar.tar.gz $(<config.txt)
In case, you are looking for compressing a directory, the following command can help.
pbzip2 compresses directories using parallel implementation
tar cf <outputfile_name> --use-compress-prog=pbzip2 <directory_name>
Just use the null-byte as delimiter when you write file / directory names to file. This way you need not worry about spaces, newlines, etc. in file names!
printf "%s\000" */ > listOfDirs.txt # alternative: find ... -print0
while IFS="" read -r -d '' dir; do command ls -1abd "$dir"; done < listOfDirs.txt
tar --null -czvf mytar.tar.gz --files-from listOfDirs.txt
create two files: filelist - place all required directories ( one on single line )
and create a simple bash script:
#!/bin/bash
for DIR in `cat filelist`
do
if [ -d $DIR ]
then
echo $DIR
fi
done