¿Hay un comando o indicador para clonar la propiedad y los permisos del usuario / grupo en un archivo de otro archivo? ¿Para hacer que los permisos y la propiedad sean exactamente los de otro archivo?
shell
permissions
files
chown
usuario394
fuente
fuente
--reference
parámetro dechmod
ychown
antes :).En cualquier unix con utilidades GNU, como Linux (no integrado) o Cygwin, puede usar
chmod --reference
ychown --reference
.Si su sistema tiene ACL , pruebe los comandos de ACL
getfacl
ysetfacl
. Estos comandos difieren un poco de un sistema a otro, pero en muchos puede usargetfacl other_file | setfacl -bnM - file_to_change
para copiar los permisos. Esto no copia la propiedad; puede hacerlo analizando cuidadosamentels -l other_file
, suponiendo que no tiene nombres de usuario o grupo que contengan espacios en blanco.fuente
Hice un comando bash basado en la respuesta de Matteo :)
Código:
chmod $( stat -f '%p' "$1" ) "${@:2}"
Uso:
cp-permissions <from> <to>...
fuente
${*:2}
? ¡Nunca vuelvas a hacer eso! Eso fallará si alguno de los nombres de archivo contiene espacio (o pestañas). Utilizar"${@:2}"
. Además, use en"$1"
lugar de solo$1
.chmod "$(stat -c '%a' "$fromfile")" tofile
en GNU Coreutils, pero también podría usarlo--reference
en ese caso, ya que lastat
utilidad CLI no es POSIX, incluso dice pubs.opengroup.org/onlinepubs/9699919799/utilities/ls.htm,ls -l
eso no lo cortará: "La salida de ls (con la opción -l y opciones relacionadas) contiene información que lógicamente podría ser utilizada por utilidades como chmod y touch para restaurar los archivos a un estado conocido. Sin embargo, esta información se presenta en un formato que esas utilidades no pueden usar directamente. se traduce fácilmente a un formato que puede usarse "Si no está utilizando un sistema con chmod / chown de GNU (que admite la
--reference
opción), podría intentar analizar la salida dels -l
Aquí un pequeño script para
chmod
(si tiene una vista que admite expresiones regulares extendidas, podrían escribirse de una manera mucho más legible ...)ACTUALIZACIÓN :
Esto es aún más fácil usando
stat
:fuente
ls -l
salida, podría analizar lastat
salida.stat
sintaxis * BSD aquí. Suchmod $(stat ...)
comando no funcionará porque%p
solo genera demasiada información para * BSDchmod
, use%Lp
para generar solo los bits u / g / o. Se requeriría algo un poco más elaborado para los bits fijos / setuid / setgid.Quería agregar un ajuste al guión de Matteo . Se debe usar un bucle for para validar que los archivos existen antes de ejecutar realmente el comando chmod en ellos. Esto permitirá que el error del script salga con más gracia.
Creo que esta es la mejor opción porque se puede usar para todos los sistemas operativos * nix, como Solaris, Linux, etc.
Descubrí que en una de mis máquinas Solaris 10
stat
no se encontraba. Sin embargo, eso podría ser un problema con mi configuración.fuente
Esto funciona para mi:
cp -p --attributes-only <from> <to>
fuente