Команда mv - не перезаписывать файлы

8

Я хочу mvфайлы и не перезаписывать дубликаты. -bПереключатель делает только один резервный файл, в то время как у меня может быть много.

Согласно mvсправочной странице :

Суффикс резервной копии равен '~', если он не установлен с помощью --suffix или SIMPLE_BACKUP_SUFFIX. Метод управления версиями может быть выбран с помощью параметра --backup или переменной среды VERSION_CONTROL. Вот значения:

нет, выкл.
никогда не создавать резервные копии (даже если задано --backup)
нумеровано, t
сделать нумерованные резервные копии
существующими, nil
пронумеровано, если существуют нумерованные резервные копии, просто в противном случае
просто, никогда не
делайте простых резервных копий

Я думаю, что хочу использовать «существующий, ноль» вариант ... но я не могу понять, как это назвать.

Если моя команда:

mv $src $dest

Как я могу реализовать опцию «существующий, ноль»?

Будь моим другом
источник
Этот ответ имеет хороший ответ об использовании cpвместо mv: unix.stackexchange.com/a/9902
Коннор Лич

Ответы:

6

Чтобы включить existingили nil(или любой другой параметр), передайте их как значения для --backupпараметра:

mv --backup=existing "$src" "$dest"
mv --backup=nil "$src" "$dest"

Имейте в виду, что это не делает то, что вы хотите:

$ 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’

Вы на самом деле хотите 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~
Мур
источник
это кажется действительно загадочным. Для чего нужна опция резервного копирования?
Коннор Лич
1
@ConnorLeech для управления настройками резервного копирования?
Муру
0
mv --backup=existing $src $dest

или

mv --backup=nil $src $dest
Флориан Диш
источник
После многих попыток я получил работающий синтаксис - но опция nil не работала. --backup = t, хотя. СПАСИБО!
BeMy Friend
0
mv --backup=t "$src/$file" "$dest"
Будь моим другом
источник
подробности см.man mv
Старейшина Гик