Shell script to move files matching a pattern, and keeping the same tree structure

Hi

I would like to write a shell script that would move files matching the pattern *_t.* to another location, while keeping the directory structure from the original location.

Can someone help ?
LVL 1
terencepiresAsked:
Who is Participating?
 
agriesserConnect With a Mentor Commented:
OK, I'm now having access to a linux machine.
Here's the fixed version:
#!/bin/sh
 
basedir=/source
destdir=/destination
 
for file in $(cd $basedir && find . -type f -name "*_t.*"); do
  mkdir -p $destdir/$(dirname $file)
  mv $basedir/$file $destdir/$file
done

Open in new window

0
 
rowansmithCommented:
You don't need a script for this, you can just use the tar command.

0
 
agriesserCommented:
Untested (currently no access to a linux machine):

#!/bin/sh
 
basedir=/source
destdir=/destination
 
for file in $(find $basedir -type f -name "*_t.*"); do
  mkdir -p ${destdir}/$(dirname $file)
  mv $basedir/$file $destdir/$file
done

Open in new window

0
Cloud Class® Course: Ruby Fundamentals

This course will introduce you to Ruby, as well as teach you about classes, methods, variables, data structures, loops, enumerable methods, and finishing touches.

 
rowansmithCommented:
The following takes everything in the parents subdirectory tartest, and coppies it to the current directory.

It will only create the sub directories where their is a file to be extracted...

Go to the directory where you want the files to be and replace ../tartest with the full path to the directory where your source files are.

Put the tar command in a script if you want :-)
rowan@daedalus:~/output$ tar -cvvf - ../tartest/ | tar -xvvf - *_t.*
 
[Storing everything starts here]
 
tar: Removing leading `../' from member names
drwxr-xr-x rowan/users       0 2008-06-21 23:25:55 ../tartest/
-rw-r--r-- rowan/users       0 2008-06-21 23:20:41 ../tartest/abc.t.33
drwxr-xr-x rowan/users       0 2008-06-21 23:23:20 ../tartest/dir2/
-rw-r--r-- rowan/users       0 2008-06-21 23:23:20 ../tartest/dir2/abc123_t.gft
-rw-r--r-- rowan/users       0 2008-06-21 23:22:56 ../tartest/abc123_t.gft
drwxr-xr-x rowan/users       0 2008-06-21 23:23:25 ../tartest/dir3/
-rw-r--r-- rowan/users       0 2008-06-21 23:23:25 ../tartest/dir3/abc123_t.gft
drwxr-xr-x rowan/users       0 2008-06-21 23:23:13 ../tartest/dir1/
-rw-r--r-- rowan/users       0 2008-06-21 23:23:13 ../tartest/dir1/abc123_t.gft
 
 
[Writing out starts here]
 
-rw-r--r-- rowan/users       0 2008-06-21 23:23:20 tartest/dir2/abc123_t.gft
drwxr-xr-x                  Creating directory: tartest
drwxr-xr-x                  Creating directory: tartest/dir2
-rw-r--r-- rowan/users       0 2008-06-21 23:22:56 tartest/abc123_t.gft
-rw-r--r-- rowan/users       0 2008-06-21 23:23:25 tartest/dir3/abc123_t.gft
drwxr-xr-x                  Creating directory: tartest/dir3
-rw-r--r-- rowan/users       0 2008-06-21 23:23:13 tartest/dir1/abc123_t.gft
drwxr-xr-x                  Creating directory: tartest/dir1

Open in new window

0
 
terencepiresAuthor Commented:
thanks to both of you !

I prefer the scripting solution as it will be something i will have to do more than once, so it's a lot more convenient to me !

Anyway I get an error when running the script :

mv: rename /Users/terencepires/Documents/Skydog/Images/Images_Skydog///Users/terencepires/Documents/Skydog/Images/Images_Skydog//54_nude_honeys_FR_TOUR/1_t.jpg to
/Users/terencepires/Documents/Skydog/Images/Thumbnails//Users/terencepires/Documents/Skydog/Images/Images_Skydog//54_nude_honeys_FR_TOUR/1_t.jpg: No such file or directory

0
 
agriesserCommented:
And here's a version that works with command line parameters (if desired).

Usage: move-files.sh /source /destination
#!/bin/sh
 
if [ "$#" != "2" ]; then
  echo "Usage: $(basename $0) <source-dir> <destination-dir>"
  exit 1
fi
 
basedir="$1"
destdir="$2"
 
for file in $(cd $basedir && find . -type f -name "*_t.*"); do
  mkdir -p $destdir/$(dirname $file)
  mv $basedir/$file $destdir/$file
done

Open in new window

0
 
terencepiresAuthor Commented:
THANK
YOU !

Cheers
Terence
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.