mv command - don't overwrite files
I want to mv
files and not overwrite duplicates. The -b
switch only makes a single backup file, whereas I may have many.
According to the mv
man page:
The backup suffix is '
~
', unless set with--suffix
orSIMPLE_BACKUP_SUFFIX
. The version control method may be selected via the--backup
option or through theVERSION_CONTROL
environment variable. Here are the values:none, off: never make backups (even if --backup is given)
numbered, t: make numbered backups
existing, nil: numbered if numbered backups exist, simple otherwise
simple, never: always make simple backups
I think I want to use the 'existing, nil' option... but I can't figure out how to call that.
If my command is:
mv $src $dest
How can I implement the 'existing, nil' option?
To enable existing
or nil
(or any of the other options), pass them as values for the --backup
option:
mv --backup=existing "$src" "$dest"
mv --backup=nil "$src" "$dest"
Be warned that this does not do what you want:
$ mkdir foo bar
$ cp blah/* foo
$ cp blah/* bar
$ mv --backup=nil bar/* foo/* -t blah
mv: will not overwrite just-created ‘blah/a.jpg’ with ‘foo/a.jpg’
mv: will not overwrite just-created ‘blah/b.ogv’ with ‘foo/b.ogv’
mv: will not overwrite just-created ‘blah/cd ef.JpG’ with ‘foo/cd ef.JpG’
You actually want numbered
/t
:
$ mv --backup=numbered bar/* foo/* -t blah
$ ls blah
a.jpg a.jpg.~1~ a.jpg.~2~ b.ogv b.ogv.~1~ b.ogv.~2~ cd ef.JpG cd ef.JpG.~1~ cd ef.JpG.~2~