Creo que este es el más elegante, ya que tampoco intenta mover ..
:
mv /source/path/{.[!.],}* /destination/path
Puede encontrar un conjunto completo de soluciones al respecto en la respuesta de UNIX y Linux a ¿Cómo se mueven todos los archivos (incluidos los ocultos) de un directorio a otro? Muestra soluciones en Bash, zsh, ksh93, estándar (POSIX) sh, etc.
Puede usar estos dos comandos juntos:
mv /path/subfolder/* /path/ # your current approach
mv /path/subfolder/.* /path/ # this one for hidden files
O todos juntos (gracias pfnuesel):
mv /path/subfolder/{.,}* /path/
Que se expande a:
mv /path/subfolder/* /path/subfolder/.* /path/
(ejemplo:echo a{.,}b
se expande a a.b ab
)
Tenga en cuenta que esto mostrará un par de advertencias:
mv: cannot move ‘/path/subfolder/.’ to /path/.’: Device or resource busy
mv: cannot remove /path/subfolder/..’: Is a directory
Simplemente ignóralos:esto sucede porque /path/subfolder/{.,}*
también se expande a /path/subfolder/.
y /path/subfolder/..
, que son el directorio y el directorio principal (consulte ¿Qué significan "." y ".." cuando están en una carpeta?).
Si solo desea copiar, puede usar un mero:
cp -r /path/subfolder/. /path/
# ^
# note the dot!
Esto copiará todos los archivos, tanto los normales como los ocultos, desde /path/subfolder/.
se expande a "todo desde este directorio" (Fuente:¿Cómo copiar con cp para incluir archivos ocultos y directorios ocultos y sus contenidos?)
Esto moverá todos los archivos al directorio principal como se esperaba, pero no moverá los archivos ocultos. ¿Cómo hacer eso?
Podrías activar dotglob
:
shopt -s dotglob # This would cause mv below to match hidden files
mv /path/subfolder/* /path/
Para apagar dotglob
, tendrías que decir:
shopt -u dotglob