• Empleos
  • Sobre nosotros
  • Empleos
    • Inicio
    • Empleos
    • Cursos y retos
  • Empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

237
Vistas
¿Cómo copio un archivo conservando los permisos originales?

Me gustaría copiar un archivo usando Go puro, emulando el comportamiento de cp -p .

Mi función de copy actualmente se ve así:

 // copy creates a copy of the file located at `dst` at `src`. func copyFile(src, dst string) error { in, err := os.Open(src) if err != nil { return err } defer in.Close() out, err := os.Create(dst) if err != nil { return err } _, err = io.Copy(out, in) if err != nil { out.Close() return err } return out.Close() }

que creará dst propiedad de quien esté ejecutando el proceso. En cambio, me gustaría mantener el propietario y los permisos de src , es decir, lo que obtengo de:

 // copy creates a copy of the file located at `dst` at `src`. func copyFile(src, dst string) error { cmd := exec.Command("cp", "-p", src, dst) return cmd.Run() }

pero sin tener que llamar a los comandos del sistema (para portabilidad). Todo lo que probé terminó llamando a otra cosa. ¿Es posible hacerlo en Go?

over 3 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Definitivamente es posible en Go, pero no de una manera independiente del sistema (porque los diferentes núcleos del sistema operativo tienen ideas diferentes sobre qué son los "permisos" y cómo se implementan).

Considere también que la identidad utilizada por el proceso que copia el archivo puede tener permisos insuficientes para establecer permisos en el archivo de destino (por ejemplo, en Linux, un usuario no raíz no puede cambiar el grupo propietario de un archivo a un grupo del que el usuario no es propietario). un miembro de, y obviamente no puede asignar el propietario del archivo a nadie más que a ellos mismos; en otras palabras, los simples mortales no pueden transferir el látigo del propietario, solo compartir archivos dentro de sus propios "círculos" definidos por la pertenencia al grupo).

Básicamente, para hacer lo que está buscando, debe Stat el archivo de origen y luego os.Chmod (y os.Chown , si es necesario) el archivo de destino después de crearlo.


También tenga en cuenta que los sistemas de archivos nativos de Linux admiten ACL POSIX en archivos, y cada archivo puede tenerlos o no.
Si incluye esto en lo que define como "permisos", es una pregunta abierta.

over 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda