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?


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.


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

1
Zamiast tego skryptu można bezpośrednio uruchomić cpnastępujące mvpolecenie.
reza.safiyat

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.