Come forzare la sovrascrittura di directory non vuote usando `mv`


17

Voglio spostare (non solo copiare) un gruppo di file / directory in una directory diversa, alcune delle quali hanno conflitti di nomi con file / directory nella directory di destinazione. Il mio obiettivo principale è spostare i file, quindi posso tollerare che la directory non vuota venga sovrascritta.

Attualmente sto usando mv ... destinationcomunque, ogni tanto capisco

mv: impossibile spostare `target 'in / destination / target': directory non vuota

Ho provato mv -f ... destinationsenza successo e poiché voglio che i file vadano dalla loro posizione originale, rsyncnon sembra appropriato.

Come bonus, c'è una buona soluzione per preservare i file destinati a essere sovrascritti in qualche modo forse rinominando?


E quale errore ricevi quando provi il tuo comando mv?
sospetto

Dici esplicitamente che rsyncnon è quello che vuoi; perché hai taggato questo rsync?
DopeGhoti,

@DopeGhoti Ho detto che non sembra appropriato, ma sono disposto a mostrarmi diversamente.
user1227038

@suspectus Domanda aggiornata.
user1227038

1
se si utilizza use mv --backup=numberedo una delle altre opzioni per lo --backupswitch, allora mvsi completerà l'unione e si manterranno i file destinati a essere sovrascritti
bsd

Risposte:


19

Se si utilizza mv --backup=numbered
(o una delle altre opzioni per lo --backupswitch),
quindi mvcompleterà l'unione e conservano i file destinati ad essere sovrascritto.


risposta stupida - questo inquinerà il tuo disco con le .~1~cartelle
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
Invece di questo script, si potrebbe eseguire direttamente il cpseguito dal mvcomando.
reza.safiyat,

0

È possibile utilizzare mc(Midnight Commander) all'interno dello schermo e delle cartelle con InseF6

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.