Overwrite local files from copies in a flat directory, even if they're in a different directory structure

for f in $(find * -maxdepth 0 -type f); do file=$(find ~/target -name $f); if [ -n "$file" ]; then cp $file ${file}.bak; mv $f $file; fi; done
You could start this one with for f in *; do BUT using the find with "-type f" ensures you only get files not any dirs you might have It'll also create backups of the files it's overwriting Of course, this assumes that you don't have any files with duplicated filenames in your target structure

0
By: sanmiguel
2009-07-08 10:18:06

These Might Interest You

  • Here is how to replicate the directory structure in the current directory to a destination directory (given by the variable DESTDIR), without copying the files.


    1
    find . -type d -print0 | (cd $DESTDIR; xargs -0 mkdir)
    rocketraman · 2010-11-18 09:33:51 0
  • This will make a false directory with the same file names as whatever directory you choose. This is wise to use when testing scripts that alter contents, filenames, or move files. I wrote this after an OOPS I made when renaming a directory of JPGs, PNGs, PSDs that were mixed. I recommend this as I lost over 2000 vacation pictures and some graphics I designed for software and web sites. :( NOTE: This only creates name copies, that data itself is not copied.


    1
    for each in /usr/bin/*; do echo $each | sed 's/\/usr\/bin\///' | xargs touch; done
    evil · 2011-10-13 19:14:34 0
  • I can remember "cp -av" on Unix like systems to copy files and directories. The same can be done on Windows without extra software, somewhat. The switches mean: /E Copies directories and subdirectories, including empty ones. Same as /S /E. May be used to modify /T. /H Copies hidden and system files also. /Y Suppresses prompting to confirm you want to overwrite an existing destination file. /Z Copies networked files in restartable mode. /I If destination does not exist and copying more than one file, assumes that destination must be a directory. /K Copies attributes. Normal Xcopy will reset read-only attributes. /F Displays full source and destination file names while copying. I don't type that all the time, I stick it into a file called "cpav.cmd" and run that. echo xcopy /e/h/y /z/i /k /f %1 %2 > cpav.cmd cpav zsh zsh2 http://support.microsoft.com/kb/323007 Show Sample Output


    -3
    xcopy /e/h/y /z/i /k /f src dest
    piyo · 2009-02-13 16:25:09 0
  • This command copies all filenames in the current dir and subdirs that end in .mp3 regardless of case (also matches .MP3 .mP3 and .Mp3) It copies all the files to the "mp3" folder in your home directory. If you want to see the files that are beeing copied, replace "cp {}" with "cp -v {}"


    1
    find . -type f -iname '*.mp3' -exec cp {} ~/mp3/ \;
    SlimG · 2009-12-09 00:19:14 2

What do you think?

Any thoughts on this command? Does it work on your machine? Can you do the same thing with only 14 characters?

You must be signed in to comment.

What's this?

commandlinefu.com is the place to record those command-line gems that you return to again and again. That way others can gain from your CLI wisdom and you from theirs too. All commands can be commented on, discussed and voted up or down.

Share Your Commands



Stay in the loop…

Follow the Tweets.

Every new command is wrapped in a tweet and posted to Twitter. Following the stream is a great way of staying abreast of the latest commands. For the more discerning, there are Twitter accounts for commands that get a minimum of 3 and 10 votes - that way only the great commands get tweeted.

» http://twitter.com/commandlinefu
» http://twitter.com/commandlinefu3
» http://twitter.com/commandlinefu10

Subscribe to the feeds.

Use your favourite RSS aggregator to stay in touch with the latest commands. There are feeds mirroring the 3 Twitter streams as well as for virtually every other subset (users, tags, functions,…):

Subscribe to the feed for: