O GNU cp(1) tem uma opção de backup:
cp --backup SOURCE [SOURCE...] [DESTINATION]
Isso tem os seguintes efeitos que podem ser controlados com outras opções, conforme descrito na página de manual de cp(1) :
--backup[=CONTROL] make a backup of each existing destination file -b like --backup but does not accept an argument -S, --suffix=SUFFIX override the usual backup suffixThe backup suffix is
~, unless set with--suffixorSIMPLE_BACKUP_SUFFIX. The version control method may be selected via the--backupoption or through theVERSION_CONTROLenvironment variable. Here are the values:
none,off: never make backups (even if--backupis given)numbered,t: make numbered backupsexisting,nil: numbered if numbered backups exist, simple otherwisesimple,never: always make simple backups
Exemplo
cp --backup=existing --suffix=.orig ~/Music/* ~/Videos
Isso copiará todos os arquivos em ~/Music para ~/Videos . Se um arquivo com o mesmo nome existir no destino, ele será renomeado anexando .orig ao seu nome como backup. Se houver um arquivo com o mesmo nome do backup, o backup será renomeado anexando .1 e, se houver, .2 e assim por diante. Só então o arquivo de origem é copiado para o destino.
Se você deseja copiar arquivos em subdiretórios, use recursivamente -R :
cp -R --backup=existing --suffix=.orig ~/Music ~/Videos