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


19

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

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


Те же разрешения, что и у другого файла, но отличаются от каталога, в котором они находятся?
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:\.

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.