Reputation: 17006
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) two ways I can think of providing the list of files:
OR
The first option seems more straightforward (though less elegant).
The two problems I am facing are that I am not sure how to do the following:
Could someone suggest in a few lines, how I can do this?
BTW, I am running on Ubuntu 10.0.4
Upvotes: 17
Views: 33327
Reputation: 29
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>
Upvotes: 0
Reputation: 1
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
Upvotes: 0
Reputation: 11808
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)
Upvotes: 39
Reputation: 3967
You can export a variable like DIRECTORIES="DIR1 DIR2 DIR3 ...." And in the script you need to use the variable like tar czvf $DIRECTORIES
Upvotes: 0
Reputation: 49
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
Upvotes: 0