Jak wymusić zastąpienie niepustych katalogów za pomocą `mv`

17

Chcę przenieść (nie tylko skopiować) grupę plików / katalogów do innego katalogu, z których niektóre mają konflikty nazw z plikami / katalogami w katalogu docelowym. Moim głównym celem jest przeniesienie plików, aby tolerować nadpisywanie niepustego katalogu.

Obecnie używam mv ... destinationjednak, czasami dostaję

mv: nie można przenieść `target 'do / destination / target': katalog nie jest pusty

Próbowałem mv -f ... destinationbezskutecznie, a ponieważ chcę, aby pliki zostały usunięte z oryginalnej lokalizacji,rsync nie wydaje się to odpowiednie.

Jako bonus, czy istnieje dobre rozwiązanie do zachowania plików, które mają zostać w jakiś sposób nadpisane, może poprzez zmianę nazwy?

użytkownik1227038
źródło
A jaki błąd pojawia się przy próbie wykonania komendy mv?
podejrzany
Wyraźnie mówisz, że rsyncnie tego chcesz; dlaczego oznaczyłeś to tagiem rsync?
DopeGhoti
@DopeGhoti Powiedziałem, że to nie wydaje się odpowiednie, ale jestem gotów pokazać inaczej.
user1227038
@suspectus Zaktualizowano pytanie.
user1227038
1
jeśli użyjesz przełącznika mv --backup=numberedlub skorzystasz z jednej z innych opcji --backup, mvzakończy scalanie i zachowa pliki przeznaczone do zastąpienia
bsd

Odpowiedzi:

19

Jeśli użyjesz mv --backup=numbered
(lub jednej z innych opcji --backupprzełącznika),
to mvdokończy scalanie i zachowa pliki przeznaczone do zastąpienia.

bsd
źródło
głupia odpowiedź - spowoduje to zanieczyszczenie twojego dysku .~1~folderami
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
źródło
1
Zamiast tego skryptu można bezpośrednio uruchomić cpnastępujące mvpolecenie.
reza.safiyat
0

Możesz używać mc(Midnight Commander) na ekranie i folderach za pomocą InsiF6

zestaw narzędzi
źródło