Estoy tratando de encontrar una forma POSIX estándar para duplicar los permisos de un archivo a otro archivo. En un sistema GNU esto es fácil:
[alexmchale@bullfrog ~]$ ls -l hardcopy.*
-rw-r--r-- 1 alexmchale users 2972 Jul 8 20:40 hardcopy.1
---------- 1 alexmchale users 2824 May 14 13:45 hardcopy.4
[alexmchale@bullfrog ~]$ chmod --reference=hardcopy.1 hardcopy.4
[alexmchale@bullfrog ~]$ ls -l hardcopy.*
-rw-r--r-- 1 alexmchale users 2972 Jul 8 20:40 hardcopy.1
-rw-r--r-- 1 alexmchale users 2824 May 14 13:45 hardcopy.4
Desafortunadamente, el indicador de referencia a chmod es una opción no estándar. Entonces eso está fuera para mis propósitos. Preferiría que fuera de una sola línea, pero eso no es necesario. En definitiva, debe estar en la sintaxis sh POSIX.
command-line
unix
chmod
posix
Alex
fuente
fuente
cp has template
, debería usarsecp -p
para preservar el modo y los atributos de propiedad.cp
si el propietario / grupo del archivo (por ejemplo, "usuario") es diferente del que realiza la copia (por ejemplo, root).cp -p
allí.Puede usar el
stat
comando para obtener el permiso de archivo:Sintaxis de Mac OS X (BSD):
Sintaxis de Linux (no estoy seguro):
El símbolo ` es una cita inversa.
fuente
stat
sea requerido por POSIX. A menudo no está disponible.Las utilidades ACL getfacl y setfacl se pueden usar para este propósito, pero no sé si este POSIX cumple lo suficiente. Funciona al menos en FreeBSD 8.0 y Linux, pero por otro lado uno podría tener que instalar las utilidades de ACL.
Desde la página del manual:
Creo que getfacl y setfacl también pueden operar con permisos de archivo estándar además de los ACL.
fuente
cp -p
preservará los permisos de archivo.fuente
-p
) funciona para lo que quiere el OP, que es duplicar los permisos para un archivo diferente , no un duplicado del archivo.Una forma sencilla y portátil no es una utilidad estándar: necesitaría llamar a stat () en el archivo de plantilla, luego a chmod () en los archivos de destino. Esto significa usar un lenguaje como C u otro lenguaje ampliamente utilizado como perl.
Los permisos de acceso a archivos se especifican en el miembro struct stat st_mode por 0007777 bits. La solución de Dennis es correcta, si es un poco pesado en E / S, por lo que para archivos realmente grandes puede fallar:
Considere este ejemplo no listo para la producción:
fuente