Well, time to learn! Be sure to read
man rsync.
Here's an example (simplified for brevity):
Code:
$ cat mkdata
#!/bin/bash
for network in {A..C} ; do
for station in {1..3} ; do
for channel in {1..3} ; do
dir=data/$network/N${network}_S${station}/N${network}_S${station}_C${channel}
mkdir -p $dir
for file in {1..3} ; do
touch $dir/file${file}
done
done
done
done
Now, let's make the data:
Code:
$ ./mkdata
$ ls -R data
A/ B/ C/
data/A:
NA_S1/ NA_S2/ NA_S3/
data/A/NA_S1:
NA_S1_C1/ NA_S1_C2/ NA_S1_C3/
data/A/NA_S1/NA_S1_C1:
file1 file2 file3
data/A/NA_S1/NA_S1_C2:
file1 file2 file3
data/A/NA_S1/NA_S1_C3:
file1 file2 file3
data/A/NA_S2:
NA_S2_C1/ NA_S2_C2/ NA_S2_C3/
data/A/NA_S2/NA_S2_C1:
file1 file2 file3
data/A/NA_S2/NA_S2_C2:
file1 file2 file3
data/A/NA_S2/NA_S2_C3:
file1 file2 file3
data/A/NA_S3:
NA_S3_C1/ NA_S3_C2/ NA_S3_C3/
data/A/NA_S3/NA_S3_C1:
file1 file2 file3
data/A/NA_S3/NA_S3_C2:
file1 file2 file3
data/A/NA_S3/NA_S3_C3:
file1 file2 file3
data/B:
NB_S1/ NB_S2/ NB_S3/
data/B/NB_S1:
NB_S1_C1/ NB_S1_C2/ NB_S1_C3/
data/B/NB_S1/NB_S1_C1:
file1 file2 file3
data/B/NB_S1/NB_S1_C2:
file1 file2 file3
data/B/NB_S1/NB_S1_C3:
file1 file2 file3
data/B/NB_S2:
NB_S2_C1/ NB_S2_C2/ NB_S2_C3/
data/B/NB_S2/NB_S2_C1:
file1 file2 file3
data/B/NB_S2/NB_S2_C2:
file1 file2 file3
data/B/NB_S2/NB_S2_C3:
file1 file2 file3
data/B/NB_S3:
NB_S3_C1/ NB_S3_C2/ NB_S3_C3/
data/B/NB_S3/NB_S3_C1:
file1 file2 file3
data/B/NB_S3/NB_S3_C2:
file1 file2 file3
data/B/NB_S3/NB_S3_C3:
file1 file2 file3
data/C:
NC_S1/ NC_S2/ NC_S3/
data/C/NC_S1:
NC_S1_C1/ NC_S1_C2/ NC_S1_C3/
data/C/NC_S1/NC_S1_C1:
file1 file2 file3
data/C/NC_S1/NC_S1_C2:
file1 file2 file3
data/C/NC_S1/NC_S1_C3:
file1 file2 file3
data/C/NC_S2:
NC_S2_C1/ NC_S2_C2/ NC_S2_C3/
data/C/NC_S2/NC_S2_C1:
file1 file2 file3
data/C/NC_S2/NC_S2_C2:
file1 file2 file3
data/C/NC_S2/NC_S2_C3:
file1 file2 file3
data/C/NC_S3:
NC_S3_C1/ NC_S3_C2/ NC_S3_C3/
data/C/NC_S3/NC_S3_C1:
file1 file2 file3
data/C/NC_S3/NC_S3_C2:
file1 file2 file3
data/C/NC_S3/NC_S3_C3:
file1 file2 file3
Now, let's create our backup:
Code:
$ rsync -av data/ databkp/
sending incremental file list
created directory databkp
./
A/
A/NA_S1/
A/NA_S1/NA_S1_C1/
A/NA_S1/NA_S1_C1/file1
A/NA_S1/NA_S1_C1/file2
A/NA_S1/NA_S1_C1/file3
A/NA_S1/NA_S1_C2/
A/NA_S1/NA_S1_C2/file1
A/NA_S1/NA_S1_C2/file2
A/NA_S1/NA_S1_C2/file3
A/NA_S1/NA_S1_C3/
A/NA_S1/NA_S1_C3/file1
A/NA_S1/NA_S1_C3/file2
A/NA_S1/NA_S1_C3/file3
A/NA_S1/NA_S1_C3/file6
A/NA_S2/
A/NA_S2/NA_S2_C1/
A/NA_S2/NA_S2_C1/file1
A/NA_S2/NA_S2_C1/file2
A/NA_S2/NA_S2_C1/file3
A/NA_S2/NA_S2_C2/
A/NA_S2/NA_S2_C2/file1
A/NA_S2/NA_S2_C2/file2
A/NA_S2/NA_S2_C2/file3
A/NA_S2/NA_S2_C3/
A/NA_S2/NA_S2_C3/file1
A/NA_S2/NA_S2_C3/file2
A/NA_S2/NA_S2_C3/file3
A/NA_S3/
A/NA_S3/NA_S3_C1/
A/NA_S3/NA_S3_C1/file1
A/NA_S3/NA_S3_C1/file2
A/NA_S3/NA_S3_C1/file3
A/NA_S3/NA_S3_C2/
A/NA_S3/NA_S3_C2/file1
A/NA_S3/NA_S3_C2/file2
A/NA_S3/NA_S3_C2/file3
A/NA_S3/NA_S3_C3/
A/NA_S3/NA_S3_C3/file1
A/NA_S3/NA_S3_C3/file2
A/NA_S3/NA_S3_C3/file3
B/
B/NB_S1/
B/NB_S1/NB_S1_C1/
B/NB_S1/NB_S1_C1/file1
B/NB_S1/NB_S1_C1/file2
B/NB_S1/NB_S1_C1/file3
B/NB_S1/NB_S1_C2/
B/NB_S1/NB_S1_C2/file1
B/NB_S1/NB_S1_C2/file2
B/NB_S1/NB_S1_C2/file3
B/NB_S1/NB_S1_C3/
B/NB_S1/NB_S1_C3/file1
B/NB_S1/NB_S1_C3/file2
B/NB_S1/NB_S1_C3/file3
B/NB_S2/
B/NB_S2/NB_S2_C1/
B/NB_S2/NB_S2_C1/file1
B/NB_S2/NB_S2_C1/file2
B/NB_S2/NB_S2_C1/file3
B/NB_S2/NB_S2_C2/
B/NB_S2/NB_S2_C2/file1
B/NB_S2/NB_S2_C2/file2
B/NB_S2/NB_S2_C2/file3
B/NB_S2/NB_S2_C3/
B/NB_S2/NB_S2_C3/file1
B/NB_S2/NB_S2_C3/file2
B/NB_S2/NB_S2_C3/file3
B/NB_S3/
B/NB_S3/NB_S3_C1/
B/NB_S3/NB_S3_C1/file1
B/NB_S3/NB_S3_C1/file2
B/NB_S3/NB_S3_C1/file3
B/NB_S3/NB_S3_C2/
B/NB_S3/NB_S3_C2/file1
B/NB_S3/NB_S3_C2/file2
B/NB_S3/NB_S3_C2/file3
B/NB_S3/NB_S3_C3/
B/NB_S3/NB_S3_C3/file1
B/NB_S3/NB_S3_C3/file2
B/NB_S3/NB_S3_C3/file3
C/
C/NC_S1/
C/NC_S1/NC_S1_C1/
C/NC_S1/NC_S1_C1/file1
C/NC_S1/NC_S1_C1/file2
C/NC_S1/NC_S1_C1/file3
C/NC_S1/NC_S1_C2/
C/NC_S1/NC_S1_C2/file1
C/NC_S1/NC_S1_C2/file2
C/NC_S1/NC_S1_C2/file3
C/NC_S1/NC_S1_C3/
C/NC_S1/NC_S1_C3/file1
C/NC_S1/NC_S1_C3/file2
C/NC_S1/NC_S1_C3/file3
C/NC_S2/
C/NC_S2/NC_S2_C1/
C/NC_S2/NC_S2_C1/file1
C/NC_S2/NC_S2_C1/file2
C/NC_S2/NC_S2_C1/file3
C/NC_S2/NC_S2_C2/
C/NC_S2/NC_S2_C2/file1
C/NC_S2/NC_S2_C2/file2
C/NC_S2/NC_S2_C2/file3
C/NC_S2/NC_S2_C3/
C/NC_S2/NC_S2_C3/file1
C/NC_S2/NC_S2_C3/file2
C/NC_S2/NC_S2_C3/file3
C/NC_S3/
C/NC_S3/NC_S3_C1/
C/NC_S3/NC_S3_C1/file1
C/NC_S3/NC_S3_C1/file2
C/NC_S3/NC_S3_C1/file3
C/NC_S3/NC_S3_C2/
C/NC_S3/NC_S3_C2/file1
C/NC_S3/NC_S3_C2/file2
C/NC_S3/NC_S3_C2/file3
C/NC_S3/NC_S3_C3/
C/NC_S3/NC_S3_C3/file1
C/NC_S3/NC_S3_C3/file2
C/NC_S3/NC_S3_C3/file3
sent 4743 bytes received 1729 bytes 12944.00 bytes/sec
total size is 0 speedup is 0.00
Now let's create a new file somewhere in the directory tree representing your new daily file(s), and run rsync again:
Code:
$ rsync -av data/ databkp/
sending incremental file list
A/NA_S1/NA_S1_C3/file6
sent 1464 bytes received 70 bytes 3068.00 bytes/sec
total size is 0 speedup is 0.00
Good, it copied only the new file. What happens if we run rsync once again, without any new files or file changes:
Code:
$ rsync -av data/ databkp/
sending incremental file list
sent 1425 bytes received 51 bytes 2952.00 bytes/sec
total size is 0 speedup is 0.00
Ok, good, nothing done. Let's look at our final backup directory:
Code:
$ ls -R databkp/
A/ B/ C/
databkp/A:
NA_S1/ NA_S2/ NA_S3/
databkp/A/NA_S1:
NA_S1_C1/ NA_S1_C2/ NA_S1_C3/
databkp/A/NA_S1/NA_S1_C1:
file1 file2 file3
databkp/A/NA_S1/NA_S1_C2:
file1 file2 file3
databkp/A/NA_S1/NA_S1_C3:
file1 file2 file3 file6
databkp/A/NA_S2:
NA_S2_C1/ NA_S2_C2/ NA_S2_C3/
databkp/A/NA_S2/NA_S2_C1:
file1 file2 file3
databkp/A/NA_S2/NA_S2_C2:
file1 file2 file3
databkp/A/NA_S2/NA_S2_C3:
file1 file2 file3
databkp/A/NA_S3:
NA_S3_C1/ NA_S3_C2/ NA_S3_C3/
databkp/A/NA_S3/NA_S3_C1:
file1 file2 file3
databkp/A/NA_S3/NA_S3_C2:
file1 file2 file3
databkp/A/NA_S3/NA_S3_C3:
file1 file2 file3
databkp/B:
NB_S1/ NB_S2/ NB_S3/
databkp/B/NB_S1:
NB_S1_C1/ NB_S1_C2/ NB_S1_C3/
databkp/B/NB_S1/NB_S1_C1:
file1 file2 file3
databkp/B/NB_S1/NB_S1_C2:
file1 file2 file3
databkp/B/NB_S1/NB_S1_C3:
file1 file2 file3
databkp/B/NB_S2:
NB_S2_C1/ NB_S2_C2/ NB_S2_C3/
databkp/B/NB_S2/NB_S2_C1:
file1 file2 file3
databkp/B/NB_S2/NB_S2_C2:
file1 file2 file3
databkp/B/NB_S2/NB_S2_C3:
file1 file2 file3
databkp/B/NB_S3:
NB_S3_C1/ NB_S3_C2/ NB_S3_C3/
databkp/B/NB_S3/NB_S3_C1:
file1 file2 file3
databkp/B/NB_S3/NB_S3_C2:
file1 file2 file3
databkp/B/NB_S3/NB_S3_C3:
file1 file2 file3
databkp/C:
NC_S1/ NC_S2/ NC_S3/
databkp/C/NC_S1:
NC_S1_C1/ NC_S1_C2/ NC_S1_C3/
databkp/C/NC_S1/NC_S1_C1:
file1 file2 file3
databkp/C/NC_S1/NC_S1_C2:
file1 file2 file3
databkp/C/NC_S1/NC_S1_C3:
file1 file2 file3
databkp/C/NC_S2:
NC_S2_C1/ NC_S2_C2/ NC_S2_C3/
databkp/C/NC_S2/NC_S2_C1:
file1 file2 file3
databkp/C/NC_S2/NC_S2_C2:
file1 file2 file3
databkp/C/NC_S2/NC_S2_C3:
file1 file2 file3
databkp/C/NC_S3:
NC_S3_C1/ NC_S3_C2/ NC_S3_C3/
databkp/C/NC_S3/NC_S3_C1:
file1 file2 file3
databkp/C/NC_S3/NC_S3_C2:
file1 file2 file3
databkp/C/NC_S3/NC_S3_C3:
file1 file2 file3
That's it. Give it a try using the mkdata script above, changing sequence values and directory or filenames as you see fit.