Je pense que c'est le plus élégant, car il n'essaie pas non plus de déplacer ..
:
mv /source/path/{.[!.],}* /destination/path
Vous pouvez trouver un ensemble complet de solutions à ce sujet dans la réponse d'UNIX et Linux à Comment déplacez-vous tous les fichiers (y compris cachés) d'un répertoire à un autre ?. Il montre des solutions dans Bash, zsh, ksh93, sh standard (POSIX), etc.
Vous pouvez utiliser ces deux commandes ensemble :
mv /path/subfolder/* /path/ # your current approach
mv /path/subfolder/.* /path/ # this one for hidden files
Ou tous ensemble (merci pfnuesel):
mv /path/subfolder/{.,}* /path/
Qui s'étend à :
mv /path/subfolder/* /path/subfolder/.* /path/
(exemple :echo a{.,}b
se développe en a.b ab
)
Notez que cela affichera quelques avertissements :
mv: cannot move ‘/path/subfolder/.’ to /path/.’: Device or resource busy
mv: cannot remove /path/subfolder/..’: Is a directory
Ignorez-les simplement :cela se produit parce que /path/subfolder/{.,}*
se développe également en /path/subfolder/.
et /path/subfolder/..
, qui sont le répertoire et le répertoire parent (Voir Que signifient "." et ".." dans un dossier ?).
Si vous souhaitez simplement copier, vous pouvez utiliser un simple :
cp -r /path/subfolder/. /path/
# ^
# note the dot!
Cela copiera tous les fichiers, normaux et cachés, depuis /path/subfolder/.
se développe en "tout de ce répertoire" (Source :Comment copier avec cp pour inclure les fichiers cachés et les répertoires cachés et leur contenu ?)
Cela déplacera tous les fichiers vers le répertoire parent comme prévu, mais ne déplacera pas les fichiers cachés. Comment faire ?
Vous pouvez activer dotglob
:
shopt -s dotglob # This would cause mv below to match hidden files
mv /path/subfolder/* /path/
Pour désactiver dotglob
, vous devez dire :
shopt -u dotglob