у меня есть дерево файлов с правильным разрешением. тогда у меня есть (файловое) идентичное дерево (с другим жестким содержанием файла) с неправильными разрешениями.
Как я могу перенести макет разрешений из одного дерева в другое?
у меня есть дерево файлов с правильным разрешением. тогда у меня есть (файловое) идентичное дерево (с другим жестким содержанием файла) с неправильными разрешениями.
Как я могу перенести макет разрешений из одного дерева в другое?
Это можно сделать с помощью следующей строки оболочки:
D1=foo; D2=foo2; for entry in $(find $D1 -exec stat -f "%N:%Mp%Lp" {} \;); do $(echo $entry | sed 's#'$D1'#'$D2'#' | awk -F: '{printf ("chmod %s %s\n", $2, $1)}') ; done
просто установите правильное значение для переменных D1 и D2, укажите их на каталоги источника и назначения, запустите, и у каталогов будут права доступа в синхронизации.
Я только что узнал новый и простой способ сделать это:
Это создаст список со всеми разрешениями и владельцами.
Затем перейдите на один уровень выше места назначения и восстановите права доступа с помощью
Причина, по которой вы должны быть на один уровень выше, заключается в том, что все пути в perms.acl являются относительными.
Должно быть сделано как root.
источник
getfacl
иsetfacl
не обязательно присутствуют во всех системах..ac
в первой команде и.acl
во второй?Если у вас есть source и dest, вы можете синхронизировать ваши разрешения с
rsync -ar --perms source/ dest
Он не будет передавать данные, только разрешения ...
источник
-r
и--perms
являются избыточными, но это все еще синхронизации завивки , если они единственное , что отличается (это то , что вы сказали в вопросе, если деревья не фактически идентичны , вы не должны были сказать , что они были).Одна вещь, которую вы можете сделать, это использовать команду find для создания скрипта с командами, которые вам необходимы для копирования разрешений. Вот быстрый пример, вы могли бы сделать гораздо больше с различными параметрами printf, включая получение владельца, идентификатора группы и так далее.
источник
Два пути:
(в последнем случае / dst должен существовать)
Изменить: извините, я неправильно прочитал. Не то, что вы спросили.
источник
Я думаю, я бы написал Perl-скрипт для этого. Что-то типа:
Затем сделайте что-то вроде этого:
Я написал это на макушке моей головы, и это не было проверено; так что проверяйте это, прежде чем позволить ему стать безудержным. Это только исправляет разрешения на существующие каталоги; он не изменит разрешения для файлов и не создаст отсутствующие каталоги.
источник
Я придумал это:
Это не полностью пуленепробиваемое, но делает то, что мне нужно.
источник