Penso che questo sia il più elegante, in quanto non prova nemmeno a spostare ..
:
mv /source/path/{.[!.],}* /destination/path
Puoi trovare una serie completa di soluzioni al riguardo nella risposta di UNIX e Linux a Come si spostano tutti i file (inclusi quelli nascosti) da una directory all'altra?. Mostra le soluzioni in Bash, zsh, ksh93, standard (POSIX) sh, ecc.
Puoi usare questi due comandi insieme:
mv /path/subfolder/* /path/ # your current approach
mv /path/subfolder/.* /path/ # this one for hidden files
O tutti insieme (grazie pfnuesel):
mv /path/subfolder/{.,}* /path/
Che si espande in:
mv /path/subfolder/* /path/subfolder/.* /path/
(esempio:echo a{.,}b
si espande in a.b ab
)
Nota che questo mostrerà un paio di avvertimenti:
mv: cannot move ‘/path/subfolder/.’ to /path/.’: Device or resource busy
mv: cannot remove /path/subfolder/..’: Is a directory
Ignorali semplicemente:questo accade perché /path/subfolder/{.,}*
si espande anche a /path/subfolder/.
e /path/subfolder/..
, che sono la directory e la directory padre (Vedi Cosa significano "." e ".." quando si trovano in una cartella?).
Se vuoi solo copiare, puoi usare un semplice:
cp -r /path/subfolder/. /path/
# ^
# note the dot!
Questo copierà tutti i file, sia normali che nascosti, dal /path/subfolder/.
si espande in "tutto da questa directory" (Fonte:come copiare con cp per includere i file nascosti e le directory nascoste e il loro contenuto?)
Questo sposterà tutti i file nella directory principale come previsto ma non sposterà i file nascosti. Come si fa?
Potresti attivare dotglob
:
shopt -s dotglob # This would cause mv below to match hidden files
mv /path/subfolder/* /path/
Per disattivare dotglob
, dovresti dire:
shopt -u dotglob