Custom tar script to traverse directories and creat individual tarballs? **Help**

So i have directive listed

 ls -la
total 44
drwxr-xr-x 10 root       root       4096 May  6 12:32 .
drwxr-xr-x 22 root       root       4096 Apr 15 11:03 ..
drwxr-xr-x 13 root       root       4096 Jan  9 12:38 adodb
drwxr-xr-x  2 root       root       4096 Nov 12 10:44 cgi-bin
drwxr-xr-x  3 root       root       4096 Jan  8 14:07 error
drwxr-xr-x  2 root       root       4096 Apr  6 13:39 html
drwxr-xr-x  3 root       root       4096 Jan  8 14:09 icons
drwxrw-r--  5 virtualftp virtualftp 4096 May  5 12:40 iWatch
drwxr-x---  4 virtualftp virtualftp 4096 May  5 12:45 Marvel
drwxr-xr-x  2 root       root       4096 May  6 12:34 users

I want a tarball of each folder seperately like:

Marvel.tar.gz
iWatch.tar.gz
etc

Would this work?

#!/bin/bash
for dir in */
    do dir=`echo $dir | tr -d '/'`
    echo $dir
    tar czf $dir.tar.gz $dir
done
 

I've attempted this:

tar -czf -f !.tar.gz !
-bash: !.tar.gz: event not found

So please help me here im lost. I dont know perl that well. I understand the code and the logic. Just dont know
the syntax
eunit3130Asked:
Who is Participating?
 
eunit3130Connect With a Mentor Author Commented:
Solution:
[root@testWeb user]# ls | grep com | while read line;
> do
> tar czf /tmp/$line.tar.gz $line
> done
[root@testWeb user]# ls /tmp
test1.com.tar.gz   test2.com.tar.gz   test3.com.tar.gz

Open in new window

0
 
eunit3130Author Commented:
May i also add that i the directory listing i have above is a sample. The one i really have has multiple folders that actually are listed as:

blah.sample.com
blah2.sample.com
blah3.sample.com
blah4.sample.com
randomfolder
cgi-stuff
phpStuff

i only want the direcoties that have the ending ".com"
0
 
eunit3130Author Commented:
would this work?


 
#!/bin/bash
for dir in */
    if($dir =~ m/(com)/)
do 
    dir=`echo $dir | tr -d '/'`
      echo $dir
      tar czf /newlocation/$dir.tar.gz $dir
done

Open in new window

0
Cloud Class® Course: Microsoft Exchange Server

The MCTS: Microsoft Exchange Server 2010 certification validates your skills in supporting the maintenance and administration of the Exchange servers in an enterprise environment. Learn everything you need to know with this course.

 
omarfaridConnect With a Mentor Commented:
try this

for file in *
do
   if [ -d $file ]
   then
         tar czf  /newlocation/$file.tar.gz $file
   fi
done
0
 
eunit3130Author Commented:
i understand what your saying but i want only directories with the "com" word within its directory name. So the directories listed:

site1.domain.com
site2.domain.com
site3.domain.com
site3.domain.com

etc.  Would this do the trick?


#!/bin/bash
for dir in */
  do 
   if[$dir |grep -e \<com>\="com"]
    then
      dir=`echo $dir | tr -d '/'`
      echo $dir
      tar czf /newlocation/$dir.tar.gz $dir
   fi
done

Open in new window

0
 
eunit3130Author Commented:
this works!
#!/bin/bash
 
for dir in */
do
    dir=`echo $dir | tr -d '/'`
    echo $dir
    tar czf /resultsScript/$dir.tar.gz $dir

Open in new window

0
 
omarfaridConnect With a Mentor Commented:
good :)
0
 
eunit3130Author Commented:
however what im looking for is a single tar line command that would tar all directores ending in .com to there own individual tar balls without runnning a script.
ex:
tar czf /tmp/results/$1.tar  *'com/'
tar: /tmp/results/.tar: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now

Open in new window

0
 
omarfaridConnect With a Mentor Commented:
why don't you save the script in a file, make it executable (with chmod +x filename) and then call it with arguments
0
 
eunit3130Author Commented:
ls -A -d -1 */ |  awk -F'/' '{ print $1 }' | xargs -I {} tar czpf /tmp/'{}.tar.gz' '{}' && rm -Rf */

will tarball each dir in the current folder in its own archive and remove the source folder
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.