Unix установил разрешение файла как другой файл

Есть ли любой путь к make-файлу A, имеет точно то же разрешение файла, как файл B без указывает разрешение как 777. Например, обычно я ls файл B и проверка его установка разрешения. Затем 'chmod??? fileA'. Однако я ищу команду как

chmod --argument_to_copy_file_permission fileA fileB

Советуйте.

Править: Между прочим, есть ли любая команда для наблюдения разрешения файла в режиме цифры (как 777), спасибо.

2
задан 22.04.2011, 11:01

7 ответов

Это работает в Linux; я не уверен, является ли программами или опциями POSIX.

chmod `stat -c '%a' fileB` fileA

На MAC OSX, неотступно следующие работы то же, но опции использования та работа.:)

chmod `stat -f '%Op' fileB` fileA

(Это - верхний регистр "o", не нуль.)

Снова, я не знаю, является ли это POSIX. Я знаю, что это не будет работать над Linux;-f опция означает что-то полностью различное там.

Так или иначе обе команды работают путем взятия вывода stat команда на fileB, конкретно восьмерично отформатированные режимы файла и использование, что как режим для установки на fileA. Это означает материал, промежуточный, одинарные левые кавычки дадут Вам режимы файла.

5
ответ дан 08.12.2019, 04:39

chmod --reference=fileA fileB должен сделать это согласно странице справочника.

5
ответ дан 08.12.2019, 04:39

Это - довольно короткий сценарий жемчуга:

my ($dev, $ino, $mode, @junk) = stat "fileA";
$mode &= 07777;  # mode includes type information in higher bits
printf "%o\n", $mode;
chmod $mode, "fileB";

То, чтобы заставлять это взять аргументы и опции, оставленные как осуществление для читателя...

2
ответ дан 08.12.2019, 04:39

Вид

$ chmod ugo=rwxrwxrwx filename

Таким образом, можно просто ввести что ls(1) отчеты или запись простой сценарий, чтобы сделать это.

Это будет работать над всеми версиями Unix включая Linux и Mac.

1
ответ дан 08.12.2019, 04:39

Это - также довольно короткий сценарий Python:

import os
os.chmod('fileA', os.stat('fileB').st_mode)

И Ruby:

File.chmod(File.stat('fileA').mode, 'fileB')
0
ответ дан 08.12.2019, 04:39

Я немного дольше, чем сценарий жемчуга:

chmod $(ls -l file.whose.permissions.you.want.to.copy | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf("%0o ",k);print}' | awk '{print $1}') 
0
ответ дан 08.12.2019, 04:39

Можно передать вывод по каналу stat, измените его и затем используйте это для изменения полномочий fileB:

stat fileA | grep "Access: (" | cut -c 10-13 | xargs -i  chmod {} fileB
0
ответ дан 08.12.2019, 04:39

Теги

Похожие вопросы