Como forçar a substituição de diretórios não vazios usando o `mv`

17

Estou querendo mover (não apenas copiar) um grupo de arquivos / diretórios para um diretório diferente, alguns dos quais têm conflitos de nome com arquivos / diretórios no diretório de destino. Meu principal objetivo é mover os arquivos, para que eu possa tolerar que o diretório não vazio seja substituído.

No momento, estou usando mv ... destinationno entanto, ocasionalmente, recebo

mv: não é possível mover o `target 'para / destination / target': o diretório não está vazio

Tentei mv -f ... destinationsem sucesso e, como quero que os arquivos saiam do local original, rsyncnão parece apropriado.

Como bônus, existe uma boa solução para preservar os arquivos que devem ser sobrescritos de alguma forma, talvez renomeando?

user1227038
fonte
E que erro você obtém ao tentar seu comando mv?
precisa saber é o seguinte
Você diz explicitamente que rsyncnão é isso que deseja; por que você marcou isso rsync?
DopeGhoti
@DopeGhoti Eu disse que não parece apropriado, mas estou disposto a mostrar o contrário.
user1227038
@suspectus Pergunta atualizada.
user1227038
11
se você usar uso mv --backup=numberedou uma das outras opções para o --backupswitch, em seguida, mvirá completar a fusão e preservar os arquivos destinado a ser substituído
BSD

Respostas:

19

Se você usar mv --backup=numbered
(ou uma das outras opções para o --backupswitch),
em seguida, mvirá completar a fusão e preservar os arquivos a intenção de ser substituído.

bsd
fonte
resposta mudo - o que irá poluir a sua unidade com .~1~pastas
Toolkit
0
#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
SRC=/path/to/source
DST=/path/to/destination

for item in $SRC/*; do
    if [[ -f "$DST/$(basename "$item")" ]]; then
        newitem=$(basename $item)_old
        while [[ -f "$DST/$newitem" ]]; do
            newitem=${newitem}_old
        done
        mv "$DST/$(basename $item)" "$DST/$newitem"
    fi
    mv "$item" "$DST/$(basename $item)"
done
DopeGhoti
fonte
11
Em vez deste script, pode-se executar diretamente o cpseguido pelo mvcomando.
Rez.safiyat 5/10/2015
0

Você pode usar mc(Midnight Commander) dentro da tela e as pastas com Inse comF6

Conjunto de ferramentas
fonte