mv: directory non vuota


155

Voglio spostare il contenuto di una directory all'interno di un'altra directory con le stesse cartelle.

Ecco un esempio:

Ho ./backupquali sono le directory basee test. Ora voglio spostare queste directory in ./backupArchives.

Io lo uso questo:

mv ./backup/* ./backupArchives

ma ho ricevuto l'errore

mv: cannot move './backup/base' to './backupsArchive/base': Directory not empty

Ho provato a usare --force, ma senza fortuna. C'è un modo per spostarlo quando le cartelle esistono già?

Nota: voglio solo unire i contenuti, non c'è sovrascrittura.


Stai solo cercando di unire i contenuti delle cartelle nella destinazione o stai cercando di sovrascrivere ciò che è nella destinazione. (aiuta anche se hai l'INTERO errore, senza usare ...... per troncare i dati)
Thomas Ward

Voglio solo unire i contenuti, non c'è sovrascrittura.
UdK,

2
@UdK Anche se funzionasse, si noti che ciò non unirebbe il contenuto delle due directory. Lo spostamento di una directory sostituirà la sua destinazione. Dai un'occhiata rsyncinvece, farà la fusione.
zwets

Risposte:


188

Sebbene la sua pagina man non la documenti, mvrifiuterà di rinominare una directory in un'altra directory se la directory di destinazione contiene file. Questa è una buona cosa nel tuo caso perché ti rendi conto di voler unire il contenuto della fonte alla destinazione, il che mvnon lo farà.

Usa rsync -a backup/ backupArchives/invece. Dopo quello rm -rf backup/*.

Invece di usare rsync, puoi anche fare il classico

(cd backup && tar c .) | (cd backupArchives && tar xf -)

che ti fa guadagnare più punti geek.


4
cose belle da sapere! Entrambi funzionano alla grande. Grazie!
UdK,

5
I punti geek sono i punti migliori: D
MadMike l'

2
va notato che ciò richiede che tu abbia le dimensioni della cartella nello spazio libero. E causerà problemi orribili se no.
Pogrindis,

4
@Pogrindis Spiega quali problemi orribili si verificheranno e in che modo differiscono da qualsiasi altro tentativo di scrivere su un disco intero? Infatti, poiché entrambe le operazioni mantengono intatta la directory originale, se l'operazione fallisce semplicemente rm -rf backupArchivessenza conseguenze, per non parlare di quelle "orribili".
zwets,

4
Grazie per aver nominato l'approccio classico, molto utile se rsync non è disponibile! Funziona anche con sudo usandosudo sh -c '(cd backup && tar c .) | (cd backupArchives && tar xf -)'
ArendE il

39

Veloce e sporco, se sai cosa stai facendo:

cp -r ./backup/* ./backupArchives && rm -R ./backup/*

3
Funziona anche nella mia modalità sicura, geniale.
Banned_User,

4

Dopo la directory che si sta spostando è necessario *(rappresenta qualsiasi testo o numero). Per esempio:

mv /var/www/* /recovery/wwwrecovery/

questo è tutto, se si spostano i file, che si sposta come:

mv /var/www/index.php /recovery/index.php

Un altro modo è comprimere il contenuto di quella cartella usando tar:

tar -cvzpf backup.tar.gz /var/www 

Quindi spostalo su qualsiasi altro file. Inoltre consiglio questo passaggio perché tar lo comprime e lo riduce di dimensioni.

Per estrarre i file in un'altra cartella utilizzare

tar -xvzpf /var/www/

Se devi copiare in una posizione che non possiedi, assicurati di anteporre il tuo comando con il sudocomando dopo qualunque opzione tu decida di usare.

sudo tar -cvzpf backup.tar.gz /var/www/

Sto usando Ubuntu 12.10 e ho ottenuto: mv: opzione non valida - 'R' Prova `mv --help 'per ulteriori informazioni. In effetti .tar è carino, ma devo sapere come spostare i miei file per questa situazione. Grazie per il vostro aiuto
UdK

sto usando 12.04 desktop e server e in entrambi funziona bene. fai attenzione, se non hai fatto spazio tra folfer e -R. ho anche provato senza -R funziona allo stesso modo per me, prova senza -R, ma fai attenzione con l'ortografia: linux conta lettere maiuscole e minuscole !!! che se il percorso è errato in movimento o in movimento dalla posizione. se non hai quella cartella che vuoi spostare, metti -C dopo di essa e la creerà. prova anche prima: trova il nome -iname della tua cartella ed esegui questo comando da root, solo per vedere se esiste in un altro posto se manchi qualcosa. dammi il comando esatto che hai usato
Dimitris Theodoridis

cosa thaaa ..... metti quel nome in mezzo a **
Dimitris Theodoridis

1
Questo -Rsicuramente non dovrebbe venire dopo il primo argomento. Le opzioni (quasi) precedono sempre gli argomenti del comando. Inoltre, mvnon ha alcuna -Ropzione e, infine, la ricorsione è irrilevante per a mv. @DimitrisTheodoridis prova prima la tua risposta.
zwets

sì mio fratello hai ragione, ho sempre problemi con la mia ortografia, e comunque ho problemi con il terminale per quello o comando non trovato o creare nuovi file e directory che non conosco, solo per l'ortografia bas ... usato il comando cp, che qui ha scritto mv sory per quel fratello: D
Dimitris Theodoridis

4

Certamente rsyncfunziona, ma potrebbe funzionare anche per macchine che non supportano rsync(ad esempio in cpanel, che rsync non è installato di default).

Che dire di usare:

cd /path/to/backup/ && cp -R --parents ./* ../backupArchives

Quindi rimuovere la backupdirectory se necessario

Nota 1: è necessario accedere cdalla backupdirectory prima di eseguire ilcp -R --parents ...

Nota2: ricontrolla la backupArchivesdirectory se hai ottenuto i nuovi file dal backup.


1

Prima di porre la domanda, consideriamo un caso semplificato.

Supponiamo che in / home / admin abbiamo due cartelle fooe barche abbiano la stessa struttura di sottodirectory, ma ognuna contiene file diversi in essa. Ora vogliamo unirli in uno. Quando facciamo cose del genere mv foo/* bar, si mv: directory not emptyverifica l'errore .

La mia soluzione è rinunciare agli strumenti da riga di comando e passare a un file manager della GUI, ad esempio dolphin. Quando si rinomina fooa barin Dolphin, ti dà la possibilità di scrivere nella cartella di destinazione, e si chiede se sovrascrivere i file esistenti, in modo interattivo. Ciò evita la copia e l'eliminazione, il che in effetti consente di risparmiare tempo senza una singola riga di codice.

PS: Non ho testato tutti i file manager là fuori. Ma la maggior parte di loro dovrebbe avere questa funzione.

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.