Domanda Come si sposta una sottocartella con i contenuti in una cartella di origine diversa senza copiare?


So che è stato chiesto un milione di volte, ma non riesco a trovare la risposta a ciò che sto cercando di fare in modo specifico.

Ecco la struttura della directory:

Main Folder1
|
|-Subfolder 1
|-Subfolder 2 HasAReallyLongName
|---files
|-Subfolder 3-1000

Main Folder2
|
|-Subfolder 2 HasAReallyLongName
|---files
  • Voglio provare a ottenere una sottocartella in movimento con i suoi file su a directory diversa.
  • Non voglio copiare e quindi rimuovere nulla perché non ho abbastanza spazio.
  • Io non voglio mv /Main/Sub2/* /Main2/ perché questo mette tutto nel /Main2 cartella e non in una sottodirectory.
  • Io non voglio mkdir /Main2/... perché è un nome molto lungo (i timestamp per lo più) e non voglio scriverlo manualmente (e probabilmente lo incasinerò)
  • Per quanto ne so, rsync copia anche i file, quindi non ne sono sicuro funzionerebbe.

Eventuali suggerimenti o altri strumenti sarebbero molto apprezzati!


2
2017-07-25 20:24


origine


Provare, mv /Main/Sub2 /Main2/. Vedi se aiuta. Nota la sottile differenza nei nostri comandi. - amanthethy
@amanthethy Ho ricevuto l'errore "cartella non vuota" e l'ho provato anche con l'opzione -f. Ancora niente. - mktoaster
Scusa, prova con -r bandiera. O anche -rf. - amanthethy
-r è un'opzione non valida ... cp ha un -r per ricorsivo ma non mv - mktoaster


risposte:


Questo è completamente semplice.

mv /Main1/Sub2 /Main2

Questo crea la directory /Main2/Sub2 con tutti i contenuti dell'originale e cancella la directory /Main1/Sub2. Se non si desidera digitare il nome completo, è possibile utilizzare un glob; basta smettere di digitare il nome e terminare con * quando hai inserito abbastanza caratteri per distinguere il nome della directory da qualsiasi altra cosa nella directory (fai attenzione!):

mv /Main/Sub* /Main2

Possibili problemi che potrebbero causare il mancato funzionamento come previsto:

  • C'è già una directory all'interno /Main2 con lo stesso nome di /Main1/Sub2. Questo causa l'errore directory not empty, come mv si rifiuta di sovrascrivere la directory esistente. Se questo è il caso, rinominare (o rimuovere) la directory esistente in /Main2 primo:

    mv /Main2/Sub2 /Main2/SomethingElse
    
  • Utilizzando un percorso errato. Ricorda che tutto è case-sensitive ed essere consapevole dei percorsi relativi e ~ espansione. Questi sono tutti diversi a seconda della directory di lavoro corrente

    /Main1/Sub2
    Main1/Sub2
    ~/Main1/Sub2
    
  • Non si dispone dell'autorizzazione per scrivere nella directory di origine e / o di destinazione. Questo sarà molto evidente dal messaggio di errore: mv: cannot move 'thing' to '/place': Permission denied. In tal caso è possibile eseguire il comando preferito per risolvere il problema

    sudo !!
    

2
2017-12-10 20:37



Questo non funziona, si verificano ancora copie. Sto cercando di spostare il file da 90 Gb dalla cartella home a root - Eugene Mala
Cosa non funziona? Che cosa stai facendo e che errore stai ottenendo? @EugeneMala - Zanna
Nel mio caso mv ha sempre copiato i file perché ho provato a spostare il file dalla cartella home della password criptata - Eugene Mala


Fatto: utilizzando sudo mv /Main1/Sub2 /Main2 lo ha fatto per me. La principale differenza sta nel supporre che io sia root.


-1
2017-07-25 20:55



In realtà questo funziona solo a volte per qualsiasi motivo ... A volte quando eseguo il sudo mv comando, mostrerà ancora l'errore "Directory non vuota" ... - mktoaster
C'è un articolo sul messaggio ERRORE qui: askubuntu.com/questions/269775/mv-directory-not-empty  Sembra essere causato dal fatto che il FOlder non sia vuoto. Quindi la prima volta funzionerebbe con MV, ma dopo non funzionerà. - amanthethy
Non è corretto, non è un problema di autorizzazioni. Il problema è che la directory che stai cercando di spostare è quella che contiene una directory con lo stesso nome. È possibile ottenere ciò che si desidera rimuovendo o rinominando la directory /Main2/Sub2. Dopo di che, mv /Main1/Sub2 /Main2 funzionerà come previsto - Zanna