Права клонирования и разрешения от другого файла?

Есть ли команда или флаг для клонирования прав пользователя / группы и разрешений на файл из другого файла? Сделать perms и владение точно «похожим» на другой файл?

5 Solutions collect form web for “Права клонирования и разрешения от другого файла?”

На GNU / Linux chown и chmod есть опция --reference

 chown --reference=otherfile thisfile chmod --reference=otherfile thisfile 

В любом unix с утилитами GNU, таких как (не встроенные) Linux или Cygwin, вы можете использовать chmod --reference и chown --reference .

Если ваша система имеет ACL , попробуйте команды ACL getfacl и setfacl . Эти команды немного отличаются от системы к системе, но на многих вы можете использовать getfacl other_file | setfacl -bnM - file_to_change getfacl other_file | setfacl -bnM - file_to_change чтобы скопировать разрешения. Это не копирует право собственности; вы можете сделать это при тщательном анализе ls -l other_file , считая, что у вас нет имен пользователей или групп, содержащих пробелы.

 LC_ALL=C ls -l other_file | { read -r permissions links user group stuff; chown -- "$user:$group" file_to_change } getfacl other_file | setfacl -bnM - file_to_change 

Была ли команда bash на основе ответа Matteo 🙂

Код:

chmod $( stat -f '%p' "$1" ) "${@:2}"

Применение:

cp-permissions <from> <to>...

Если вы не используете систему с chmod / chown от GNU (которые поддерживают параметр --reference ), вы можете попытаться проанализировать вывод ls -l

Вот небольшой скрипт для chmod (если у вас есть вид, который поддерживает расширенные регулярные выражения, они могут быть написаны гораздо более читабельным способом …)

 #!/bin/sh reference=$1 shift files=$* # strip the permissions (whith extended regexes could be more readable) OWNER=$(ls -l ${reference} | sed -e "s/.\(...\).*/\1/" | sed -e "s/[-]//g" ) GROUP=$(ls -l ${reference} | sed -e "s/....\(...\).*/\1/" | sed -e "s/[-]//g" ) OTHER=$(ls -l ${reference} | sed -e "s/.......\(...\).*/\1/" | sed -e "s/[-]//g" ) chmod u=${OWNER},g=${GROUP},o=${OTHER} ${files} 

ОБНОВЛЕНИЕ :

Это еще проще при использовании stat :

 chmod $( stat -f '%p' ${reference} ) ${files} 

Я хотел добавить корректировку к скрипту Маттео . Цикл for должен использоваться для проверки того, что файлы существуют до фактического запуска команды chmod. Это позволит скрипту выходить из строя более изящно.

Я думаю, что это лучший вариант, потому что он может использоваться для всех * nix-систем, таких как Solaris, Linux и т. Д.

 #!/bin/sh reference=$1 shift files=$* for file in $reference $files; do [ -f $file ] || { echo "$file does not exist"; exit 1; } done # strip the permissions (whith extended regexes could be more readable) OWNER=$(ls -l ${reference} | sed -e "s/.\(...\).*/\1/" | sed -e "s/[-]//g" ) GROUP=$(ls -l ${reference} | sed -e "s/....\(...\).*/\1/" | sed -e "s/[-]//g" ) OTHER=$(ls -l ${reference} | sed -e "s/.......\(...\).*/\1/" | sed -e "s/[-]//g" ) chmod u=${OWNER},g=${GROUP},o=${OTHER} ${files} 

Я обнаружил, что на одной из моих машин Solaris 10 stat не был найден. Однако это может быть проблемой с моей конфигурацией.

  • Использование kornshell или Perl для обхода разрешений, необходимых для root
  • chown удаляет липкий бит: ошибка или функция?
  • В чем разница между параметрами -H и -L chown?
  • chown не работает через скрипт
  • Изменено право собственности на весь os на root: root
  • Будет ли всегда пара одинаковых UID и GID?
  • как смонтировать общий ресурс CIFS, поэтому я могу полностью контролировать смонтированный том на клиенте
  • Как изменить содержимое каталога без sudo?
  • Использование chown $ USER: $ USER внутри сценария bash
  • Изменение прав собственности файла без ошибок
  • chown -R www-data: www-data устанавливает право собственности на root
  • Linux и Unix - лучшая ОС в мире.