Come posso spostare tutti i file da una cartella all'altra usando la riga di comando?


245

Vorrei sapere come posso spostare tutti i file da una cartella a un'altra cartella con una riga di comando.

Diciamo che sono nella mia cartella Download e ci sono 100 file che vorrei spostare nella mia cartella Video, senza dover scrivere tutto il nome del file.


Stai chiedendo filesdi spostarti, ma le persone ti mostrano come muoverti non solo filesma foldersanche. È ok?
Askar,

2
@ Hontvári Levente ha dato una risposta un anno fa che sembra essere di gran lunga la migliore, pulita, semplice e funziona. Quindi, come ha ottenuto solo 3 voti (rispetto ai 262 per la risposta attualmente in alto)?
Ray Butterworth il

Risposte:


331

Apri un terminale ed esegui questo comando:

mv  -v ~/Downloads/* ~/Videos/

Sposterà tutti i file e le cartelle dalla cartella Download alla cartella Video.


Per spostare tutti i file, ma non le cartelle:

Se sei interessato a spostare tutti i file (ma non le cartelle) dalla cartella Download alla cartella Video, usa questo comando

find ~/Downloads/ -type f -print0 | xargs -0 mv -t ~/Videos

Per spostare solo i file dalle cartelle Download, ma non dalle sottocartelle:

Se si desidera spostare tutti i file dalla cartella Download, ma non tutti i file all'interno delle cartelle nella cartella Download, utilizzare questo comando:

find ~/Downloads/ -maxdepth 1 -type f -print0 | xargs -0 mv -t ~/Videos

qui, l' -maxdepthopzione specifica il modo in cui provare a trovare in profondità, 1significa solo la directory specificata nel comando find. Puoi provare a usare 2, 3anche per testare.

Vedi la manpage di Ubuntu per una spiegazione dettagliata


3
puoi usare mv da solo per spostare un'intera directory in un'altra cartella: mv folder ~ / Documents
JohnMerlino

20
Cordiali saluti, credo che il tuo primo comando ("mv -v ~ / Downloads / * ~ / Videos /") non sposterà i file punto.
Mark Doliner,

1
Sì, non sposterà i file .fan
Anwar

3
Nb. la tua -print0 | xargs -0 mv -t ~/Videospuò essere fatto in modo più efficiente con -exec mv -t ~/Videos \{\} \+:-)
artfulrobot

3
mv -v ~/Downloads/* ~/Videos/non funziona con file nascosti
FreeLightman,

28
mv ~/Downloads/* ~/Videos

Sposterà tutti i file comprese le sottocartelle nella directory che si desidera mv. Se vuoi cp(copiare) o rm(rimuovere) avrai bisogno -rdell'opzione (ricorsiva) per includere le sottocartelle.


2
Il mio comando mv non ha un'opzione -R (Ubuntu 14.04).
Mark Doliner,

1
@MarkDoliner, sì, mvnon è necessaria l'opzione ricorsiva per includere le sottocartelle. Si può usare anche per rinominare.
Alen,

Non avevo bisogno di *. La stessa cosa è successa senza usare la stella.
MycrofD

Il ~ / nel prefisso dei nomi delle cartelle non funziona sempre (non funziona su bash e git atleast)
Krish Munot

Questa soluzione genererà un errore se la directory di origine è vuota.
Pierre Thibault,

11

Per il semplice caso:

mv ~/Downloads/* ~/Videos

Se si desidera spostare anche file dot (nascosti), impostare l' opzione shell dotglob .

shopt -s dotglob
mv ~/Downloads/* ~/Videos

Questo lascia l'opzione della shell impostata.

Per una volta usa dotglob, esegui i comandi in una subshell:

(shopt -s dotglob; mv ~/Downloads/* ~/Videos)

Una nota per me: L'ultima opzione (shopt -s dotglob; mv ~/Downloads/* ~/Videos) solo si muove (tagli) il contenuto (inclusi i file nascosti). In questo caso, entrambe le cartelle di origine e destinazione devono già esistere. Alla fine, la directory di origine diventa vuota.
Pathros,

Questa dovrebbe essere la risposta accettata
megar

11

È possibile utilizzando rsync, ad esempio:

rsync -vau --remove-source-files src/ dst/

dove:

-v, --verbose: Aumenta la verbosità.

-a, --archive: Modalità archivio; uguale -rlptgoD(no -H, -A, -X).

-u, --update: Salta i file più recenti sul ricevitore.

--remove-source-files Questo dice rsyncdi rimuovere dal lato mittente i file (che significa non directory) che fanno parte del trasferimento e che sono stati duplicati con successo sul lato ricevente.

Se hai i privilegi di root, aggiungi il prefisso sudoper sovrascrivere potenziali problemi di autorizzazione.


1
AVVERTIMENTO! l'opzione --delete-after come notato non funziona come ci si potrebbe aspettare. Non elimina i file di origine dopo una copia corretta ... ELIMINA TUTTI I FILE RIMANENTI / ALTRI NELLA DESTINAZIONE. (come notato da @kenorb ... ma non ho letto abbastanza attentamente! DOH)
Jay Marm

4

Uso

mv -v ~/rootfolder/branch/* ~/rootfolder

Spero che questo possa essere d'aiuto. Perché ho avuto lo stesso dolore e ho perso molto tempo a correggere l'errore.


2

Per spostare una directory con o senza contenuto sul suo nuovo nome, proprio come utilizzare il mvcomando per rinominare un file:

mv -T dir1 dir2

dove:

  • -T considera la destinazione come un file normale
  • dir1 è il nome originale della directory
  • dir2 è il nuovo nome della directory

NB: dir2non deve esistere.

Spero che questo risparmi molto tempo a qualcuno, come noob, prima di questo, vorrei creare una directory con il nuovo nome e quindi spostare il contenuto della directory nella directory creata in precedenza.

Utilizzare per le sottodirectory

Questo comando è utile quando molti file sono stati salvati in una sottocartella della directory di destinazione, ad es Downloads/mp4. In questo esempio, l'esecuzione mv -T Downloads/mp4 Videoscomporta la rimozione della mp4sottocartella e tutti i file contenuti all'interno vengono spostati nella cartella Video.


1
+1 perché testato funzionando in Xubuntu 14.04. Ho aggiunto un esempio in questa risposta per mostrare che questo comando causerà la dir1rimozione. A parte questa precauzione, questa risposta ha notato qualcosa di buono per l'uso quotidiano.
Clearkimura,

1
"Per spostare una directory con o senza contenuto nel suo nuovo nome" Come puoi spostare una directory ... in un nome? Non ha senso. "-T tratta la destinazione come un file normale" Come può una destinazione essere un file? Vuoi dire directory?
Monica Heddneck,

È come rinominare un file con il suo nuovo nome come faresti con qualcosa del genere, mv fileA fileBma -Tin questo caso il flag tratta la cartella destinazione / come un file e lo rinomina.
Feyisayo Sonubi,

Ha funzionato per me :)
Naveen Kumar V

1
  1. Vai alla riga di comando e accedi alla directory in cui vuoi spostarla cd folderNamehere
  2. Tipo pwd. Questo stamperà anche la directory che desideri spostare.
  3. Quindi passare alla directory in cui si trovano tutti i file cd folderNamehere
  4. Ora per spostare tutti i tipi di file mv *.* typeAnswerFromStep2here

Ciò sposterà tutti i file da quella directory all'altra.


3
Questo non corrisponderà ai file senza alcuna estensione. ad esempio, se una cartella ha i file: foo.txt, bar.e barsia bar.e barnon sarà spostato. Usare *invece di *.*occuparsene. Ma in entrambi i casi, i file nascosti come: .foobarnon verranno spostati.
Dan,

1
mv source_path/* destination_path/

qui devi portare avanti la barra e *dopo il percorso del sorgente in modo che prenderà i file all'interno di source_path invece della directory di origine completa.

Esempio: mv /home/username/test/* /home/username/test2/

Il comando precedente sposta tutti i file (a meno che non siano nascosti) nella directory di origine nella directory di destinazione.


0

Provalo

find ~/Desktop -type f -iname  "*.mp4" -exec mv {} ~/Videos \;

-type con l'argomento -type è possibile specificare type file.on questa istruzione è il file.if medio che usa -d significa directory.

-iname: il metodo più comune e ovvio per cercare un file sta usando l'argomento -name.se non sei sicuro della sua distinzione tra maiuscole e minuscole, puoi usare l'argomento -iname

mv {} e infine per specificare la directory di destinazione e quindi spostare i file lì usando l'argomento mv {}

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.