¿Cómo puedo hacer una cp -r
copia absolutamente todos los archivos y directorios en un directorio
Requisitos:
- Incluye archivos ocultos y directorios ocultos.
- Sea un solo comando con una bandera para incluir lo anterior.
- No es necesario confiar en la coincidencia de patrones en absoluto.
Mi feo, pero trabajando, hack es:
cp -r /etc/skel/* /home/user
cp -r /etc/skel/.[^.]* /home/user
¿Cómo puedo hacer esto todo en un comando sin la coincidencia de patrones? ¿Qué bandera necesito usar?
Respuestas:
No especifique los archivos:
(Tenga en cuenta que
/home/user
no debe existir ya, o de lo contrario se creará/home/user/skel
).fuente
/home/user/skel
no existe?-T
(sin objetivo) por debajo para un uso adecuado. (-rT
para recursivo)Digamos que creó la nueva carpeta (o que va a crear una) y desea copiar los archivos después de crear la carpeta.
Esto copiará todos los archivos / carpetas de forma recursiva
/etc/skel
en la carpeta ya existente creada en la primera línea.fuente
.
, este comportamiento requeriría que creara un directorio ya existente, por lo que simplemente omite ese paso..
, para cambiar que necesita usar elshopt -s dotglob
comando antes para poder incluir esos archivos. Entonces*
, de manera predeterminada, solicita copiar todos los archivos de forma recursiva desde este directorio que se puede expandir utilizando*
(que no incluye archivos ocultos de manera predeterminada). Mientras que en el otro extremo.
está usando cp para copiar recursivamente todo de "este directorio".La forma correcta de hacerlo es usar la
-T (--no-target-directory)
opción y copiar recursivamente las carpetas (sin barras diagonales, asteriscos, etc.), es decir:Esto copiará el contenido de
/etc/skel
a/home/user
(incluidos los archivos ocultos), creando la carpeta/home/user
si no existe; sin embargo, la-T
opción evita que el contenido/etc/skel
se copie en una nueva carpeta en/home/user/skel
caso de que la carpeta/home/user
exista.fuente
bash
en sí tiene una buena solución, tiene unshell option
, puedescp
,mv
y así sucesivamente .:y
La solución anterior es estándar de
bash
NOTA:
fuente
setopt
para zsh, en caso de que alguien más se pregunte.Use rsync:
rsync -rtv source_folder/ destination_folder/
fuente
rsync
es bueno, pero otra opción:De la ayuda principal:
fuente
Si su directorio de origen y de destino tienen el mismo nombre, incluso si existe el directorio de destino, simplemente puede escribir:
Esto copiará el directorio / etc / skel en / home /, incluidos los archivos y directorios ocultos.
Finalmente, puede copiar el directorio y cambiarle el nombre en una sola línea:
fuente
cp -r /etc/skel /home/user
para cambiar el nombreskel
auser
...Podrías usar rsync.
Incluso puedes copiar sobre ssh
Hay varios indicadores que puede usar: -a, --archive # archive (-rlptgoD)
Página de manual de Rsync
fuente
La forma más simple es:
La expresión
{.,}*
incluye todos los archivos y directorios (también comenzando con un punto).Si no desea usar la expresión anterior, puede usar la
cp
propiedad, que es la capacidad de especificar múltiples fuentes para una carpeta de destino:fuente
..anything
o...anything
etc. - stackoverflow.com/a/31438355/2351568 contiene la expresión regular correcta para este problema. || ¡Pero de todos modos usarshopt -s dotglob
es la mejor solución!.
y..
(que es equivalente a la carpeta actual y que contiene). || pero aún así la respuesta en el enlace lo explica más y proporciona una solución.Tenga en cuenta que hay un truco en la línea de comandos (funciona en, al menos, sh , bash y ksh ): simplemente agregue el directorio from con una barra inclinada. Esto verter el contenido de la del directorio en el que el directorio (irónicamente, había aprendido primero sobre este truco cuando el uso de rsync ).
Ejemplo:
fuente
Vine aquí buscando en Google una solución para el mismo problema, luego me di cuenta de que es fácil hacerlo con find. La ventaja es que no depende del shell o de las utilidades especiales que no se pueden instalar.
Intenté el truco con la barra diagonal final, pero eso no funcionó para mí.
fuente
Mi solución para este problema cuando tengo que copiar todos los archivos (incluidos los
.
archivos) a un directorio de destino que retiene los permisos es: (sobrescribir si ya existe)yes
es para sobrescribir automáticamente archivos de destino,r
recursivos,v
detallados,p
retener permisos.Tenga en cuenta que la ruta de origen no termina con a
/
(por lo que se copian todos los archivos / directorios y archivos.)El directorio de destino termina
/
cuando colocamos el contenido de la carpeta de origen en el destino en su conjunto.fuente
He visto que cp no siempre copia archivos ocultos y si desea un comando que parece funcionar en todos los dialectos de Linux / Unix, debe intentar usar:
fuente
Al menos a partir de K3b 2.0.3, hay un cuadro de preguntas que aparece cuando se agrega el directorio al proyecto, que le pregunta si desea incluir archivos ocultos ... también hay una pregunta que surge para preguntar sobre incluir Enlaces. ¡Lindas cosas!
fuente