Debe ser una pregunta popular pero no pude encontrar una respuesta.
Cómo mover todos los archivos a través de * incluidos los archivos ocultos al directorio principal como este:
mv /path/subfolder/* /path/
Esto moverá todos los archivos al directorio principal como se esperaba, pero no moverá los archivos ocultos. ¿Como hacer eso?

cp -r /path/to/source/. /destinationRespuestas:
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:
O todos juntos ( gracias pfnuesel ):
Que se expande a:
(ejemplo: se
echo a{.,}bexpande aa.b ab)Tenga en cuenta que esto mostrará un par de advertencias:
Simplemente ignórelos: 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 simple:
Esto copiará todos los archivos, tanto los normales como los ocultos, ya que se
/path/subfolder/.expande a "todo lo de este directorio" (Fuente: ¿Cómo copiar con cp para incluir archivos ocultos y directorios ocultos y su contenido? )fuente
mv /path/subfolder/* /path/subfolder/.* /path/, no es estrictamente necesario para combinar los dos comandos en uno.mv: overwrite `/path/.'? y mv: cannot move `/path/subfolder/.' to `/path/.': Device or resource busy mv: overwrite `/path/..'? y mv: cannot move `/path/subfolder/..' to `/path/..': Device or resource busy.denota directorio actual y..denotaupdirectorio. Debes haber notado que todos los demás archivos se mueven.Creo que este es el más elegante, ya que tampoco intenta moverse
..:fuente
..anythingo...anythingetc. - stackoverflow.com/a/31438355/2351568 contiene la expresión regular correcta para este problema. || ¡Pero de todos modos usarshopt -s dotglobsigue siendo la mejor solución!{a,b}*encontraría todos los archivos que empiecen con aob, como "anatomía" y "bulldozer". La segunda coincidencia es solo una coincidencia vacía, equivalente a*, y la primera coincidencia es equivalente a.[!.], donde el grupo[!.]significa un grupo que NO comienza con a.. Esto significa.*pero no..*.Podrías encender
dotglob:Para apagar
dotglob, deberías decir:fuente
man shoptque no funciona yhelp shoptes muy breve. Pero puedes hacerlobashman () { man bash | less -p "^ $1 "; }y luegobashman shoptleer todo sobre él directamente. (Es posible que tenga que presionar n para saltar al comando si hay líneas que comienzan con shopt, como descubrí).ls... por lo tanto, no es realmente lo que querrías, probablementeUna solución alternativa más sencilla es utilizar la
rsyncutilidad:Nota: El comando anterior mostrará lo que se va a cambiar. Para ejecutar los cambios reales, elimine
--dry-run.La ventaja es que la carpeta original (
subfolder) se eliminaría así como parte del comando, y al usarmvejemplos aquí, aún necesita limpiar sus carpetas, sin mencionar el dolor de cabeza adicional para cubrir archivos ocultos y no ocultos en una sola. patrón.Además,
rsyncbrinda soporte para copiar / mover archivos entre controles remotos y aseguraría que los archivos se copien exactamente como estaban originalmente (-a).El
-uparámetro utilizado omitiría los archivos más nuevos existentes, volvería-ra los directorios y-vaumentaría la verbosidad.fuente
sudoy--dry-run, para que la gente pueda probar los cambios antes de ejecutar el comando real para evitar posibles problemas.Permítanme presentarles a mi amigo "dotglob". Se activa y desactiva si "*" incluye archivos ocultos o no.
El valor predeterminado es "desactivado".
Es mejor volver a encenderlo cuando haya terminado, de lo contrario confundirá las cosas que asumen que estará apagado.
fuente
Al usar el
findcomando junto con elmvcomando, puede evitar que elmvcomando intente mover directorios (por ejemplo,..y.) y subdirectorios. Aquí tienes una opción:Hay problemas con algunas de las otras respuestas proporcionadas. Por ejemplo, cada uno de los siguientes intentará mover subdirectorios de la ruta de origen:
Además, 2) incluye el. y .. archivos y 3) pierde archivos como ..foobar, ... barfoo, etc.
Podría usar
mv /source/path/{.[!.],..?,}* /destination/path,, que incluiría los archivos omitidos por 3), pero aún así intentaría mover subdirectorios. Usar elfindcomando con elmvcomando como describo anteriormente elimina todos estos problemas.fuente
Mi solución para este problema cuando tengo que copiar todos los archivos (incluidos los
.archivos) en un directorio de destino que conserva los permisos es: (sobrescribir si ya existe)yeses para sobrescribir automáticamente archivos de destino,rrecursivo,vdetallado,pretener permisos.Observe que la ruta de origen no termina con a
/(por lo que se copian todos los archivos / directorio y archivos.)El directorio de destino termina
/cuando colocamos el contenido de la carpeta de origen en el destino como un todo.fuente
yeses un comando increíble para usar si desea anular los archivos de destino, no siempre se desea. Úselo solo si está seguro de que desea hacer esto. Además, ¿hay alguna diferencia entreyes | cp ...ycp -f ...?