Se você estiver usando o GNU mv , você tem a seguinte opção.
$ mv -b source/* dest/.
Essa opção informa ao mv para enviar todos os arquivos que colidem no diretório dest/. para uma versão de backup, geralmente adicionando um til ( ~ ) ao final do arquivo, antes de mover os arquivos para o diretório .
Exemplo
Digamos que eu tenha os seguintes diretórios de amostra com arquivos.
$ mkdir source dest
$ touch source/file{1..3} dest/file{1..5}
$ tree
.
├── dest
│ ├── file1
│ ├── file2
│ ├── file3
│ ├── file4
│ └── file5
└── source
├── file1
├── file2
└── file3
Agora, quando movemos arquivos de source para dest :
$ mv -b source/* dest/.
$ tree
.
├── dest
│ ├── file1
│ ├── file1~
│ ├── file2
│ ├── file2~
│ ├── file3
│ ├── file3~
│ ├── file4
│ └── file5
└── source
2 directories, 8 files
Controlando a extensão
Mais uma vez com a versão GNU de mv , você pode alterar o comportamento padrão usando a opção -S <string> .
$ mv -b -S "string" source/* dest/.
Exemplo
$ mv -b -S .old source/* dest/.
$ tree
.
├── dest
│ ├── file1
│ ├── file1.old
│ ├── file2
│ ├── file2.old
│ ├── file3
│ ├── file3.old
│ ├── file4
│ └── file5
└── source
2 directories, 8 files