Come rimuovere le directory dal sorgente dopo averle copiate?


1

Voglio solo spostare dirs. Ho guardato successivamente a mv, cp e rsync, dal momento che ogni strumento a sua volta non sembrava avere la possibilità di rimuovere le directory dall'origine dopo averle copiate. Ad esempio, mv ha bisogno di file, non di dirs, quando src e dst sono su dispositivi diversi:

"spostamento inter-dispositivo fallito: src a dst; impossibile rimuovere il target: è una directory"

Forse il modo più semplice per farlo è usare un cmd aggiuntivo di cancellazione, anche se preferirei non usarlo, poiché aumenta il rischio di perdita di dati.

Risposte:


5

Come ha detto Bob. Purtroppo non posso (ancora) commentare, quindi devo inserire le mie regolazioni qui. Suggerirei di utilizzare una versione leggermente modificata del comando Bobs:

cp -rp source-dir target-dir && rm -r source-dir;

La doppia ampli garantisce che il secondo comando venga eseguito solo se il primo termina con successo - Sarebbe un orrore se la copia fallisse per qualche ragione (ad esempio non c'è abbastanza spazio sul volume di destinazione), e la sorgente verrebbe comunque cancellata ...


Buona pesca! Non ho mai visto quella struttura prima; impara qualcosa di nuovo ogni giorno
BellevueBob

Quindi ti do un altro suggerimento utile collegato a questo: mentre il & amp; & amp; significa "E (se ha successo)", c'è anche il doppio tubo || che significa "O (se non è riuscito)" - abbastanza utile negli script, ad es. quando hai bisogno di montare prima il bersaglio, quindi copiare le cose, fare qualcos'altro, ecc .; se mount fallisce, lo script rimanente non ha senso - quindi potresti usare un costrutto come mount /path/to/target || { echo "Mount failed, aborting!"; exit 1 }
Izzy

Funziona dalla mia parte. A proposito, che cosa fa -rp?
Syaiful Nizam Yahya

@publicENEMY che utilizza gli attributi ricorsivamente e Preservanti (proprietà, permessi, ecc.). Vedere man cp :)
Izzy

1

In realtà, mv può "spostare" le directory; ma non può spostarsi su dispositivi o file system. Funziona molto velocemente perché tutto ciò che fa è ridefinire il puntatore del file; i contesti non sono copiati.

Quindi, hai bisogno di due comandi (copia poi rimuovi). Sul mio sistema Solaris, sposto le directory con questi due comandi:

cp -rp source-dir target-dir; rm -r source-dir;

Consulta le pagine man per assicurarti di utilizzare la sintassi corretta per il tuo ambiente e per il trattamento di eventuali collegamenti simbolici che potrebbero esistere.


'mv' PU move spostarsi tra dispositivi e file system, ma lo fa come 'copia' seguito da 'cancella'. Scoprirà cosa fare.
lornix

Il tuo costrutto ha un problema serio: rimuove l'originale anche se la copia non è riuscita - in tal modo efficacemente "sbarazzandosi" dei dati. Esattamente quello che OP ha menzionato come "aumenta il rischio di perdita di dati".
Izzy
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.