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.
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.
Respuestas:
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.txt
archivo 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.bin
a su nuevo nombre de archivo file2.bin
y 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
File.GetAccessControl()
yFile.SetAccessControl()
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.bat
archivo 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.
La forma más fácil, con mucho, es usar PowerShell y ejecutar:
Get-Acl .\file1 | Set-Acl .\file2