Solved

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

Posted on 2009-05-06
10
692 Views
Last Modified: 2013-12-02
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
0
Comment
Question by:eunit3130
  • 7
  • 3
10 Comments
 

Author Comment

by:eunit3130
Comment Utility
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
 

Author Comment

by:eunit3130
Comment Utility
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
 
LVL 40

Assisted Solution

by:omarfarid
omarfarid earned 500 total points
Comment Utility
try this

for file in *
do
   if [ -d $file ]
   then
         tar czf  /newlocation/$file.tar.gz $file
   fi
done
0
 

Author Comment

by:eunit3130
Comment Utility
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
 

Author Comment

by:eunit3130
Comment Utility
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
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 40

Assisted Solution

by:omarfarid
omarfarid earned 500 total points
Comment Utility
good :)
0
 

Author Comment

by:eunit3130
Comment Utility
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
 
LVL 40

Assisted Solution

by:omarfarid
omarfarid earned 500 total points
Comment Utility
why don't you save the script in a file, make it executable (with chmod +x filename) and then call it with arguments
0
 

Accepted Solution

by:
eunit3130 earned 0 total points
Comment Utility
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
 

Author Comment

by:eunit3130
Comment Utility
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

Featured Post

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

Preface There are many applications where some computing systems need have their system clocks running synchronized within a small margin and eventually need to be in sync with the global time. There are different solutions for this, i.e. the W3…
Prime numbers are natural numbers greater than 1 that have only two divisors (the number itself and 1). By “divisible” we mean dividend % divisor = 0 (% indicates MODULAR. It gives the reminder of a division operation). We’ll follow multiple approac…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…
Here's a very brief overview of the methods PRTG Network Monitor (https://www.paessler.com/prtg) offers for monitoring bandwidth, to help you decide which methods you´d like to investigate in more detail.  The methods are covered in more detail in o…

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

8 Experts available now in Live!

Get 1:1 Help Now