Права на вложенные файлы и папки

Аватар пользователя Maestro

Подскажите как задать одинаковые права на все вложенные файлы и папки

Аватар пользователя IsakovAN

Права на вложенные файлы и папки

Во-первых, не папки, а директории! Улыбка
Во-вторых, chmod -R mode path

Аватар пользователя antigrustin

Права на вложенные файлы и папки

встречный вопрос...
если в какой-либо папке нужно рекурсивно задать права для файлов и каталогов, например для файлов 0644 а для папок 0755.
как это лучше сделать?

Аватар пользователя IsakovAN

Права на вложенные файлы и папки

find $target_dir -type [f или d] | xargs chmod $mode

Аватар пользователя antigrustin

Права на вложенные файлы и папки

да уж... не очень то и тривиальное решение =(( без знаний программирования не обойтись =((

Аватар пользователя IsakovAN

Права на вложенные файлы и папки

Что здесь нетривиального? Чтобы провести какую-то операцию над множеством объектов, это множество надо как-то задать. Не очевидно? Для этого find или ls -R. Далее надо для каждого элемента выполнить команду. Все просто и логично.
Можно еще тривиальней - через вашу любимую графическую среду. Улыбка

Аватар пользователя DRVTiny

Права на вложенные файлы и папки

>без знаний программирования не обойтись
Без знаний Вам не обойтись нигде, либо Вы слишком долго будете познавать мир методом научного тыка и в конечном итоге останетесь... скажем так, на обочине прогресса.
Да и что, собственно Вы видите сложного в этом?:
find КАТАЛОГ_ВЕРХНЕГО_УРОВНЯ -type f | xargs chmod МАСКА_ДОСТУПА - поменять права на файлы
find КАТАЛОГ_ВЕРХНЕГО_УРОВНЯ -type d | xargs chmod МАСКА_ДОСТУПА - поменять права на каталоги

find, xargs, chmod - обычные общеупотребительные команды, с которыми пользователь UNIX-подобных систем рано или поздно всё равно должен будет "познакомиться" (например, для начала можете почитать man xargs)

Аватар пользователя antigrustin

Права на вложенные файлы и папки

Спасибо за пример. Работает но только когда в мени файла\директории нету пробелов...

chmod: невозможно получить доступ к `/var/ftp/pub/Games/Cossacks': Нет такого файла или каталога
chmod: невозможно получить доступ к `-': Нет такого файла или каталога
chmod: невозможно получить доступ к `Back': Нет такого файла или каталога
chmod: невозможно получить доступ к `To': Нет такого файла или каталога
chmod: невозможно получить доступ к `War/Video': Нет такого файла или каталога

на самом деле папка выглядит следующим образом /var/ftp/pub/Games/Cossacks - Back To War/Video
как пофиксить это? =)
П.С. К сожалению варианты неиспользования пробела отпадают.

Аватар пользователя IsakovAN

Права на вложенные файлы и папки

find КАТАЛОГ_ВЕРХНЕГО_УРОВНЯ -type f | xargs -n 1 -I {} chmod МАСКА_ДОСТУПА "{}"
find КАТАЛОГ_ВЕРХНЕГО_УРОВНЯ -type f | xargs -n 1 -I {} chmod МАСКА_ДОСТУПА "{}"
Или даже через цикл. Надёжнее будет:
IFS="" for i in `find КАТАЛОГ_ВЕРХНЕГО_УРОВНЯ -type f`;do chmod МАСКА_ДОСТУПА "$i";done

Аватар пользователя ks

Re: Права на вложенные файлы и папки

А если так: ?

find КАТАЛОГ -type d -exec chmod ПРАВА '{}' \;
find КАТАЛОГ -type f -exec chmod ПРАВА '{}' \;

PS

find КАТАЛОГ -type d -exec chmod ПРАВА_КАТАЛОГА '{}' \; -o -type f -exec chmod ПРАВА_ФАЙЛА '{}' \;

Аватар пользователя antigrustin

Re: Права на вложенные файлы и папки

Попробовал так...

#!/bin/bash
ftp_dir="/var/ftp/pub"
echo "Set permissions for $ftp_dir...";
echo "CHOWN files...";
chown -R ftp.ftp "$ftp_dir"
echo "CHMOD files";
find "$ftp_dir" -type f | xargs -n 1 -I {} chmod 0666 "{}"
echo "CHMOD directories...";
find "$ftp_dir" -type d | xargs -n 1 -I {} chmod 0777 "{}"
echo "Done.";

В результате получил такое вот...

Set permissions for /var/ftp/pub...
CHOWN files...
CHMOD files
xargs: unmatched одинарная quote; by default quotes are special to xargs unless you use the -0 option
CHMOD directories...
Done.

Что это может быть? Поражён

Аватар пользователя antigrustin

Re: Права на вложенные файлы и папки

IFS="" for i in `find КАТАЛОГ_ВЕРХНЕГО_УРОВНЯ -type f`;do chmod МАСКА_ДОСТУПА "$i";done

CHOWN files...
/usr/bin/setftp: line 9: syntax error near unexpected token `do'
/usr/bin/setftp: line 9: `IFS="" for i in `find "$ftp_dir" -type f` ; do chmod 0666 "$i"; done;'
Аватар пользователя antigrustin

Re: Права на вложенные файлы и папки

УРА! Получилось. =)

#!/bin/bash
ftp_dir="/var/ftp/pub";
echo "Set permissions for $ftp_dir...";
echo "CHOWN files...";
chown -R ftp.ftp "$ftp_dir";
echo "CHMOD files...";
find "$ftp_dir" -type f -exec chmod 0666 '{}' \;
echo "CHMOD directories...";
find "$ftp_dir" -type d -exec chmod 0777 '{}' \;

Всем огромное спасибо за участие =)

Аватар пользователя ks

Re: Права на вложенные файлы и папки

Цитата:
find "$ftp_dir" -type f | xargs -n 1 -I {} chmod 0666 "{}"
echo "CHMOD directories...";
find "$ftp_dir" -type d | xargs -n 1 -I {} chmod 0777 "{}"
echo "Done.";

Желательно обрабатывать каталоги перед файлами, а то find может не получить доступ к
файлу, лежащему в каталоге, на который еще нет прав.

Цитата:
В результате получил такое вот...
Код:

Set permissions for /var/ftp/pub...
CHOWN files...
CHMOD files
xargs: unmatched одинарная quote; by default quotes are special to xargs unless you use the -0 option
CHMOD directories...
Done.

В имени файла попался спецсимвол (возможно символ конца строки).
Для этих случаев у find есть опция "-print0" - разделять имена файлов символом '\0',
а для xargs "-0" - принимать имена файлов, разделенных '\0'

Аватар пользователя IsakovAN

Re: Права на вложенные файлы и папки

ks писал(а):
find "$ftp_dir" -type f | xargs -n 1 -I {} chmod 0666 "{}"

Ну а зачем?
find "$ftp_dir" -type f | xargs -n 1 -I {} chmod 0666 {}

Аватар пользователя ks

Re: Права на вложенные файлы и папки

Цитата:
Ну а зачем?

Часть цитаты. :-? В чем вопрос?

Аватар пользователя IsakovAN

Права на вложенные файлы и папки

ks писал(а):
В чем вопрос?

Кавычки вокруг {} не нужны.

Аватар пользователя antigrustin

Права на вложенные файлы и папки

т.е. окончательно должно выглядеть таким образом?

#!/bin/bash
ftp_dir="/var/ftp/pub";
echo "Set permissions for $ftp_dir...";
echo "CHOWN files...";
chown -R ftp.ftp "$ftp_dir";
echo "CHMOD directories...";
find "$ftp_dir" -type d -exec chmod 0777 {} ;
echo "CHMOD files...";
find "$ftp_dir" -type f -exec chmod 0666 {} ;

П.С. я понимаю что это на скорость может не сыграть, просто хотелось бы приучить себя сразу делать как надо =)

Аватар пользователя IsakovAN

Права на вложенные файлы и папки

antigrustin писал(а):
т.е. окончательно должно выглядеть таким образом?

Да

antigrustin писал(а):
хотелось бы приучить себя сразу делать как надо =)

И правильно! Улыбка

RSS-материал