Копировать разрешения безопасности одного файла в другой

19

Я хотел бы скопировать права доступа к одному файлу. Я не хочу копировать данные, только разрешения.

Например, я создал новый файл и хочу, чтобы он имел те же разрешения, что и другой файл, который уже существовал.

Taotao
источник
Те же разрешения, что и у другого файла, но отличаются от каталога, в котором они находятся?
PsychoData

Ответы:

28

Вы можете сделать это в несколько шагов с помощью icacls и текстового редактора.

Сначала вы должны сохранить разрешения исходного файла

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

вам нужно будет отредактировать perms.txtфайл, который вы только что создали, в любой папке, в которой вы работали icacls. Файл должен выглядеть примерно так:

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

Вы можете игнорировать все вещи во втором ряду, все, что нас волнует, это первый ряд. Измените file1.binсвое новое имя файла file2.binи сохраните файл.

Теперь вам просто нужно восстановить права доступа ко второму файлу, обратите внимание, что на этот раз мы не включили имя файла. (Если вы получаете сообщение об ошибке « Не все привилегии или группы, на которые есть ссылки, назначены вызывающей стороне. » Запустите программу снова в командной строке с повышенными привилегиями.)

icacls C:\test\ /restore perms.txt
Скотт Чемберлен
источник
Может быть, положить их в сценарий, чтобы несколько автоматизировать задачу?
PsychoData
2
Это можно сделать, но я не могу придумать, как легко выполнить шаг 2. В любом случае, если бы я собирался написать сценарий, я бы просто сделал все это в Powershell, используя File.GetAccessControl()иFile.SetAccessControl()
Скотта Чемберлена
4

Чтобы сделать это в пакете (скопируйте разрешения безопасности из подпапки или всех папок одного диска в одну и ту же папку / файл на другом диске), создайте, скажем, cpdacls.batфайл с таким содержимым:

@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

А потом запусти как cpdacls.bat e:\ f:\.

Обратите внимание, что структура папки в папке назначения должна совпадать со структурой папки в исходной папке, взятой из ее корня , независимо от того, какую подпапку вы указали в качестве исходной папки.

Олекса
источник
4

На сегодняшний день самый простой способ - использовать PowerShell и запустить:

Get-Acl .\file1 | Set-Acl .\file2
Джованни Басси
источник