Risposte:
Con la cartella denominata "myfolder" e un livello superiore nella gerarchia dei file (il punto che si desidera inserire) il comando sarebbe:
mv myfolder/* .
Così, per esempio, se i dati sono stati in /home/myuser/myfolder
poi da /home/myuser/
eseguire il comando.
.*
. Rimuovere la cartella originale è sia banale che non richiesto, quindi faremo in modo che OP lo gestisca da solo.
*
e .*
in una riga? solo curiosità
mv
saranno tutti i sorgenti tranne l'ULTIMO argomento che deve essere il bersaglio per lo spostamento (e nel caso di più fonti, deve essere una cartella).
/bin/mv: Argument list too long
Giusto per renderlo chiarissimo, tratto dalla risposta di Rudu sopra e dai commenti.
Se è necessario spostare tutti i contenuti, COMPRESI i file che iniziano con a. (come .htaccess, .git, ecc.), devi includere sia * che. * nel tuo comando. Così:
mv subfolder/* subfolder/.* .
In questo modo il contenuto della sottocartella verrà spostato nella cartella corrente. Nota lo spazio prima dell'ultimo ".".
mv: rename fake/. to ./.: Invalid argument
emv: rename fake/.. to ./..: Invalid argument
Questo è possibile con i seguenti metodi:
Utilizzando rsync
:
rsync -vua --delete-after foo/ .
Utilizzando cp
e rmdir
:
cp -vaR foo/. . && rmdir foo/
Utilizzo mv
(con dotglob
opzione abilitata):
shopt -s dotglob # Includes filenames beginning with a dot.
mv -- foo/* . # Where foo/ is the folder consisting the files.
shopt -u dotglob # Disables previously enabled dotglob option.
dov'è la foo/
tua cartella il cui contenuto deve essere spostato di un livello superiore.
Vedi: help shopt
e man bash
.
Utilizzo mv
(come suggerito qui ):
mv foo/* foo/.[^.]* . && rmdir foo/
Nota: perderebbe un file chiamato foo/..bar..
.
Nota: per le shell POSIX, è necessario [!.]
.
-v
, -u
, -a
e -r
facendo? AFAICT, -v
è dettagliato, il che rende rsync più informazioni di stampa. -u
significa aggiornamento: copia un file solo se è più recente. Non sembra rilevante. -a
significa archivio. Ciò copierà il proprietario e le autorizzazioni del file e renderà la sincronizzazione ricorsiva. -r
significa ricorsivo, ma è già coperto da -a
.
-u
è utile quando non si desidera dedicare più tempo allo spostamento dei dati già presenti (soprattutto per i dispositivi di archiviazione lenti). Ho rimosso -r
, poiché è coperto da -a
come hai menzionato.
mv foo/* foo/.[^.]* .
perderebbe un file chiamato foo/..bar..
ad esempio. Si noti che per le shell POSIX è necessario [!.]
.
rsync -vua --delete-after foo/ .
elimina tutto ciò che potrebbe già esistere nella directory corrente.
basta emettere un comando mv
mv (directory)/* .
se si desidera eliminare la directory, quindi aggiungere
rm -rf (directory)
Supponendo che ci si trovi in una directory padre di (directory)
Se ti trovi all'interno della (directory), allora
mv * ../
rmdir
lamenta ed esce se la directory non è vuota, mentre rm -r
invece dovrebbe semplicemente eliminarla e tutto il suo contenuto. (È un poka-giogo .)
.DS_store
in macOS. Il mv
comando sopra non sposta questi (senza dotglob
set).
per quelli di voi su un server condiviso dovreste usare qualcosa del genere
Per spostare i file
mv -v ~/public_html/public_html/* ~/public_html/
Per copiare i file
cp -a ~/public_html/public_html/* ~/public_html/
.*
non solo*
se l'archivio conteneva file dot. Aggiungi anche `&& rmdir myfolder` alla fine per rimuovere la cartella ora estranea. Questo viene salvato perché verrà eseguito solo se mv restituisce esito positivo E perché rmdir non rimuoverà una directory non vuota.