Copie los permisos de seguridad de un archivo a otro

19

Me gustaría replicar los permisos de un archivo a otro. No quiero copiar los datos, solo los permisos.

Por ejemplo, creé un nuevo archivo y quiero que tenga los mismos permisos que otro archivo que ya existía.

TaoTao
fuente
¿Los mismos permisos que otro archivo, pero diferente del directorio en el que se encuentran?
PsychoData

Respuestas:

28

Puede hacerlo en unos pocos pasos con icacls y un editor de texto.

Primero debes guardar los permisos del archivo original

icacls C:\test\file1.bin /save perms.txt

necesitará editar el perms.txtarchivo que acaba de crear en la carpeta en la que se ejecutó icacls. El archivo debería verse así:

file1.bin
D:AI(A;;0x1301bf;;;BU)(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;0x1200a9;;;BU)(A;ID;0x1301bf;;;AU)

Puede ignorar todas las cosas en la segunda fila, todo lo que nos importa es la primera fila. Cambie file1.bina su nuevo nombre de archivo file2.biny guarde el archivo.

Ahora solo necesita restaurar los permisos de archivo en el segundo archivo, tenga en cuenta que esta vez no incluimos el nombre de archivo. (Si recibe un error que dice " No todos los privilegios o grupos a los que se hace referencia están asignados a la persona que llama ", ejecute el programa nuevamente en un símbolo del sistema elevado).

icacls C:\test\ /restore perms.txt
Scott Chamberlain
fuente
tal vez poner esto en un script para automatizar un poco la tarea?
PsychoData
2
Se podría hacer, pero no puedo pensar en la parte superior de mi cabeza cómo hacer el paso 2 fácilmente. De todos modos, si iba a escribirlo, haría todo en Powershell usando File.GetAccessControl()yFile.SetAccessControl()
Scott Chamberlain el
4

Para hacerlo en un lote (copie los permisos de seguridad de una subcarpeta o todas las carpetas de una unidad a la misma estenosis de carpeta / archivo en otra unidad), cree, digamos, un cpdacls.batarchivo con este contenido:

@echo off
for /r %1 %%f in (.) do call :icacls_one %%f %2

goto :eof

:icacls_one

icacls %1\*.* /save %TEMP%\perms.txt
icacls %2.%~pnx1 /restore %TEMP%\perms.txt
del /q %TEMP%\perms.txt

Y luego ejecutarlo como cpdacls.bat e:\ f:\.

Tenga en cuenta que la estructura de la carpeta en la carpeta de destino debe ser la misma que la estructura de la carpeta en la carpeta de origen, tomada de su raíz , sin depender de qué subcarpeta haya especificado como carpeta de origen.

Olexa
fuente
4

La forma más fácil, con mucho, es usar PowerShell y ejecutar:

Get-Acl .\file1 | Set-Acl .\file2
Giovanni Bassi
fuente