Come posso spostare file e directory nella cartella principale in Linux?


Risposte:


66
trova . -maxdepth 1 -exec mv {} .. \;

questo sposterà anche i file nascosti.

Riceverai il messaggio:

mv: impossibile spostare `. ' a `../. ': Dispositivo o risorsa occupata

quando tenta di spostarsi .(directory corrente) ma ciò non provoca alcun danno.


1
Sposta anche tutti i file da tutte le sottodirectory nel genitore della directory corrente. Vorrei -maxdepth 1essere sicuro.
inkaphink,

1
Ora dice: mv: impossibile spostare ./scripts' to ../scripts ': Directory non vuota

1
È necessario disporre di una directory denominata script nella directory principale E nella directory corrente. Dovrai rinominare questo prima di spostarlo.
inkaphink,

1
Ha funzionato ma hai lasciato un po 'di informazioni molto importanti: devi eseguirlo dalla sottodirectory. Inoltre, questo non eliminerà la stessa sottodirectory, quindi è necessario eseguire il backup di una directory ed eseguire un rmdir nella sottodirectory.
Crafter,

90

Sono venuto qui perché sono nuovo anche su questo argomento. Per qualche ragione quanto sopra non ha funzionato per me. Quello che ho fatto per spostare tutti i file da una directory alla sua directory principale è stato:

cd to/the/dir
mv * ../

12
Questo però non sposta i file nascosti
Wavesailor,

1 linea:(cd ${ANDROID_NDK_HOME}/android-ndk-r14b/ && mv * ../)
Dawid Drozd,

10

Digita questo nella shell:

mv *.* ..

Ciò sposta TUTTI i file di un livello superiore.

Il personaggio *è un jolly. Quindi *.debsposta tutti i file .deb e Zeitgeist.*sposta Zeitgeist.avi e Zeitgeist.srt di una cartella in alto, poiché, ovviamente, ..indica la directory principale.

Per spostare tutto, comprese le cartelle, ecc., Basta usare *invece di*.*


3
questo non ha funzionato con i dir! o i file nascosti

Funziona con i dirs, almeno per me.
maaartinus,

5
Vuoi *non *.*includere le directory
Chris S

È un bel documentario
BlackBurn027

6

Non può essere più semplice di:

mv * ../

Per spostare anche i file nascosti:

mv /path/subfolder/{.,}* /path/ 

mvè un comando per spostare i file, *indica tutti i file e le cartelle ed ../è il percorso della directory principale.


2

In bash è possibile utilizzare shopt -s dotglob per rendere * partita tutti i file e spostarli semplicemente

shopt -s dotglob; mv * ..

Questa non è la soluzione migliore poiché l'impostazione è permanente per la shell fino a quando non la si modifica

shopt -u dotglob

ma penso che sia bello saperlo.


4
Chiamatelo in una subshell: (shopt -s dotglob && mv * ..). In questo modo, l'opzione è solo locale per quella subshell.
Martin Ueding,

Buona risposta: è semplice, include file nascosti e non causa errori nella copia di "." e '..'
Daniel Howard,

1

Un metodo che non causa errori e funziona ogni volta:

ls -1A . | while read -r file                                                    
do                                                                                  
    mv "./${file}" ..                                                            
done

1
find . -maxdepth 2 -type f -exec mv {} .. \;

Ho usato una variante di cui sopra per spostare tutti i file dalle sottocartelle nel genitore.

Avevo i dati nelle cartelle per anno, ma ho scoperto che usando i metadati potevo averli tutti nella stessa cartella che ne semplificava la gestione.

per esempio.

/data/2001/file_1
/data/2002/file_2
/data/2003/file_3

0

Supponendo che tutti i file nascosti inizino con il punto seguito da una lettera o un numero (che dovrebbero), è possibile utilizzare

mv * .[A-Za-z0-9]* ..

La .[A-Za-z0-9]*parte è assicurarsi di non provare a muoversi .o ..lungo, il che fallirebbe.


0

È semplice spostare tutti i file e le cartelle nella directory principale in Linux.

Vai a quella cartella e usa questo comando:

mv * /the full path

Ad esempio, se i file e le cartelle sono i seguenti:

/home/abcuser/test/1.txt 
                   2.txt
                   3.jpg
                   4.php
                   1folder
                   2folder

Vai a quella cartella tramite cd:

cd /home/abcuser/test
mv * /home/abcuser

Tutti i file e le cartelle verranno spostati nella cartella abcuser (directory principale).


2
Grazie @Gareth, stava per fare lo stesso. Abhishek, per favore, non pubblicare alcun link non correlato, che senso ha? Inoltre, controlla la tua formattazione per favore. Inoltre, /the full pathnon funziona in Linux, devi sfuggire agli spazi con /the\ full\ path.
slhck,


0
find -type f|while read line; do mv $line ${line##*/}; done

Grazie per aver contribuito con una risposta. Mentre questo potrebbe funzionare in scenari semplici, il piping findin while readè un cattivo modo di usare finde sono già state pubblicate risposte migliori.
Scott,

-1

passare alla sottodirectory ed eseguire il comando seguente per copiare o spostare i file.

es: a è la directory padre e b è la directory secondaria, vogliamo spostare / copiare tutti i file da b a a (directory secondaria nella directory padre).

cd b
cp * ..
mv * ..

Benvenuto in Super User! Questo duplica un'altra risposta e non aggiunge nuovi contenuti. Per favore, non pubblicare una risposta a meno che tu non abbia effettivamente qualcosa di nuovo da contribuire.
DavidPostill
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.