copy only newer files? (xcopy equivalent)


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting copy only newer files? (xcopy equivalent)
# 1  
Old 12-01-2005
copy only newer files? (xcopy equivalent)

Howdy folks.

I have a problem - I'm sure the answer is very simple, but I can't work it out.

I want to create a UNIX shell script that does what I've been doing in DOS batch files for years - that is, backing up files. By which I mean copying files from a source directory to a target directory, only if a) the file doesn't exist at the target, or b) the file does exist but is older than the source.

In DOS, I did something like this:

xcopy c:\path\directory\*.* x:\backup\ /d /e

Where x was a networked drive, /d meaning only copy files newer than the target, /e meaning recurse into subdirectories.

In UNIX, I'm close but no cigar yet... I have the following:

cp -r /testdir/source/ /testdir/target/

This works in that it copies files, leaving the originals behind and recursing into subdirectories, but it doesn't only copy source files if they're newer than the target. It copies eveything.

I have read in a few different places that cp accepts the -u ('update' I think) option, to make it only copy newer files, but I can't get this to work. If I write cp -u, I am told that 'u' is an 'illegal option' for cp.

So, is there a way to get the behviour I'm after? Am I right to be using cp, or is there a better function to do what I want?

Doing all this on Mac OS 10.3.9, using the terminal, tcsh.

Very grateful for any help.

Cheers.
# 2  
Old 12-01-2005
gnu copy (as is on linux) has the -u option.
Also have a look at rsync
# 3  
Old 12-01-2005
hmm tcsh, tough, i didnt ever use it.
If you want to go with ksh tho, i ll use something like this
=================
tgt is the target dir

for i in *
do
newf=`find . -name $i -newer "../tgt/$i"`
if [ "x$newf" != "x" ]
then
cp $newf ../tgt/$i
fi
done

hope this gives you some pointers
# 4  
Old 12-02-2005
Thanks to both.

rsync seems to do the job, but I'm still having some issues, such as certain files not being copied - I get this:

mkstemp "path/filename.jNLmL7" failed: Invalid argument

...which is double dutch to me. Any ideas about this?

The files that do copy seem to lose their application association too, which is not a deal breaker, but is a bit of a PITA. I suspect this is something to do with me moving files around behind the Finder's back. I might chase this bit up on the Apple forums.

Cheers!
# 5  
Old 12-02-2005
Aha - After Googling to find out what mkstemp is, I've discovered that the error is due to the file name length. Shortening the file name has solved the problem - the temp file name with the .XXXXXX extension must have been pushing it over the OS's file name length limit. (I guess)
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Copy file only if newer

I only want the file copied if it is newer. But it still copies the file? zip -u Ubuntu_Documents.zip ./* cp -u Ubuntu_Documents.zip $DOCS_Backup/Ubuntu_Documents_`date +"%Y-%m-%d-%H-%M"`.zip (5 Replies)
Discussion started by: drew77
5 Replies

2. Shell Programming and Scripting

ls files newer than 6 hours

How do I list al files in a folder with a creation date/time newer than 6 hours? (2 Replies)
Discussion started by: locoroco
2 Replies

3. UNIX for Dummies Questions & Answers

Find files newer than x days

We had an arrant rsync run and started copying over new files from one system to another. Although this is what we will want to do at some point, for now, we want to maintain the system as it was a few days ago. I am looking for a script that will find files that are newer than x days. ... (5 Replies)
Discussion started by: Leyva62
5 Replies

4. Solaris

How to safely copy full filesystems with large files (10Gb files)

Hello everyone. Need some help copying a filesystem. The situation is this: I have an oracle DB mounted on /u01 and need to copy it to /u02. /u01 is 500 Gb and /u02 is 300 Gb. The size used on /u01 is 187 Gb. This is running on solaris 9 and both filesystems are UFS. I have tried to do it using:... (14 Replies)
Discussion started by: dragonov7
14 Replies

5. Shell Programming and Scripting

Copy newer files without create

I want the same effect as "cp -u" but without create missing files, it is possible ? ps: bash (2 Replies)
Discussion started by: mrxrsd
2 Replies

6. Shell Programming and Scripting

cp work as xcopy.

Actually i want to copy some file locations to another. so if directory not exist it should create that. i used cp -R/r but it copies only one directory. it doesnt make directory inside directory.. so i want this should create them automatically. One more thing if file already exist there... (8 Replies)
Discussion started by: ajayyadavmca
8 Replies

7. UNIX and Linux Applications

sftp -> put : How to uplaod only newer files

I have tried winscp, filezilla to copy data from windows xp SP2 machine to the sun sparc unix machine. However speed is around 120 to 130 kb/sec. I do have lot of files & with large size. So I switched to windows command prompt & transfered few files using sftp command. Its very fast as compared... (0 Replies)
Discussion started by: _prasad
0 Replies

8. Solaris

To copy the files newer than specific date

Dear all, Can you help me in copying files newer than speciifc date Thanks in advance, Rajesh (3 Replies)
Discussion started by: RAJESHKANNA
3 Replies

9. UNIX for Dummies Questions & Answers

Find files newer than...

Is there a way to use the find command to locate files newer than a specific date? Thanks! --Alex (4 Replies)
Discussion started by: vertigo23
4 Replies

10. UNIX for Dummies Questions & Answers

tar --newer = tar --newer-mtime ?

Hi, I have the following question : As far as I know unix doesn't store file creation dates. Would that imply the following? tar -cvzf backup.tar --newer is equal to: tar -cvzf backup.tar --newer-mtime ? (1 Reply)
Discussion started by: jamesbond
1 Replies
Login or Register to Ask a Question