mv: Directory non vuota

119

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

Ecco un esempio:

Ho ./backup con le directory base e test . Ora voglio spostare queste directory in ./backupArchives .

Io 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.

    
posta UdK 19.03.2013 - 05:11
fonte

5 risposte

156

Anche se la sua pagina man non la documenta, mv rifiuterà di rinominare una directory in un'altra directory se la directory di destinazione contiene file. Questa è una buona cosa nel tuo caso perché ti viene voglia di unire il contenuto della sorgente nella destinazione, che mv non farà.

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

Invece di usare rsync , puoi anche fare il classico

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

che ti consente di guadagnare più punti Geek.

    
risposta data zwets 19.03.2013 - 08:51
fonte
24

Veloce e sporco, se sai cosa stai facendo:

cp -r ./backup/* ./backupArchives && rm -R ./backup/*
    
risposta data patrickvacek 10.10.2013 - 18:07
fonte
3

Dopo la directory che stai spostando hai bisogno di * (rappresenta qualsiasi testo o numero). Ad esempio:

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

questo è tutto, se si spostano file, di quanto si muova come:

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

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

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

Quindi spostalo su qualsiasi altro file. Raccomando anche questo passaggio perché tar lo comprime e ne riduce le dimensioni.

Per estrarre i file in un'altra cartella usa

tar -xvzpf /var/www/

Se devi copiare in una posizione che non possiedi, assicurati di anteporre il comando con il comando sudo dopo l'opzione che decidi di utilizzare.

sudo tar -cvzpf backup.tar.gz /var/www/
    
risposta data Dimitris Theodoridis 19.03.2013 - 05:27
fonte
2

Certo rsync funziona, ma potrebbe funzionare anche per macchine che non supportano rsync (cioè in cpanel, che rsync non è installato di default).

Che ne dici di usare:

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

Quindi rimuovi la directory backup se necessario

Nota 1: devi cd alla directory backup prima di eseguire cp -R --parents ...

Nota2: controlla la directory backupArchives se hai ottenuto i nuovi file dal backup.

    
risposta data Atillo Regner Rex 03.03.2017 - 08:45
fonte
1

Prima di porre la domanda, consideriamo un caso semplificato.

Supponiamo che in / home / admin abbiamo due cartelle foo e bar che hanno la stessa struttura di sottodirectory, ma ognuna contiene file diversi in essa. Ora vogliamo unirli in uno solo. Quando facciamo cose come mv foo/* bar , si verifica l'errore mv: directory not empty .

La mia soluzione è di abbandonare gli strumenti da riga di comando e passare a un gestore di file GUI, ad esempio, delfino. Quando rinominate foo in bar in dolphin, vi dà la possibilità di scrivere nella cartella di destinazione e vi chiede se sovrascrivere i file esistenti, in modo interattivo. Ciò evita la copia e l'eliminazione, che in effetti consentono di risparmiare tempo senza una sola riga di codice.

PS: non ho testato tutti i file manager là fuori. Ma molti di loro dovrebbero avere questa funzionalità.

    
risposta data navigaid 12.10.2016 - 11:22
fonte

Leggi altre domande sui tag