Рекурсивно дать каталоги read&execute полномочия:
find /path/to/base/dir -type d -exec chmod 755 {} +
Рекурсивно дать полномочия на чтение файлов:
find /path/to/base/dir -type f -exec chmod 644 {} +
Или, если существует много объектов обработать:
chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)
Или, для сокращения chmod
порождение:
find /path/to/base/dir -type d -print0 | xargs -0 chmod 755
find /path/to/base/dir -type f -print0 | xargs -0 chmod 644
Общая причина этого вида вещи состоит в том, чтобы установить каталоги на 755, но файлы к 644. В этом случае существует немного более быстрый путь, чем nik's find
пример:
chmod -R u+rwX,go+rX,go-w /path
Значение:
-R
= рекурсивно;u+rwX
= Пользователи могут читать, записать и выполниться;go+rX
= группа и другие могут читать и выполниться;go-w
= группа и другие не могут записатьВажной вещью отметить вот является тот верхний регистр X
действия по-другому к нижнему регистру x
. В руководстве мы можем читать:
Выполняться/искать биты, если файл является каталогом или каким-либо из выполняться/искать битов, установлены в исходном (неизмененном) режиме.
Другими словами, chmod u+X на файле не установит выполнить бит; и g+X только установит его, если это будет уже установлено для пользователя.
Вы могли использовать следующий сценарий удара в качестве примера. Обязательно дайте ему исполняемые полномочия (755). Просто используйте./autochmod.sh для текущего каталога или./autochmod.sh <dir> для определения другого.
#!/bin/bash
if [ -e $1 ]; then
if [ -d $1 ];then
dir=$1
else
echo "No such directory: $1"
exit
fi
else
dir="./"
fi
for f in $(ls -l $dir | awk '{print $8}'); do
if [ -d $f ];then
chmod 755 $f
else
chmod 644 $f
fi
done
Если Вы хотите удостовериться, что файлы установлены на 644 и существуют файлы в пути, которые имеют выполнить флаг, необходимо будет удалить выполнить флаг сначала. +X не удаляет выполнить флаг из файлов, у кого уже есть он.
Пример:
chmod -R ugo-x,u+rwX,go+rX,go-w path
Обновление: это, кажется, перестало работать, потому что первое изменение (ugo-x) делает неисполняемый файл каталога, таким образом, все файлы под ним не изменяются.