Рекурсивный chmod только папки или только файлы с помощью сценария или меню наутилуса?

tail -f access | awk '/ADD/{print $0}'

Используйте вышеупомянутое, я обычно использую его.

8
13.04.2017, 15:36
3 ответа

Вот сценарий, который можно назвать путем передачи режима как первого аргумента и одних или нескольких имен каталогов как последующие аргументы. В соответствии с Linux, если Вы не передаете имени каталога, это будет, как будто Вы передали . (текущий каталог). Назовите этот сценарий rchmodf, сделайте это исполняемым файлом (chmod a+rx /path/to/rchmodf) и помещенный это где-нибудь на Ваш $PATH.

#!/bin/sh
mode=$1; shift
find "$@" -type f -exec chmod "$mode" {} +

Объяснения: mode=$1; shift устанавливает переменную mode к первому аргументу сценария и удаляет тот первый аргумент от списка. "$@" расширяется до списка всех аргументов.

Если Вам нравится, можно сделать сценарий, который принимает и режим каталога и режим файла.

#!/bin/sh
dir_mode=$1; shift
file_mode=$1; shift
find "$@" -type d -exec chmod "$dir_mode" {} + -o -type f -exec chmod "$file_mode" {} +

Обратите внимание, что 744 не полезный режим файла; 644 (перезаписываемый пользователем и читаемый миром) и 755 (также мировой исполняемый файл) намного более распространены. Кроме того, изменение каждого файла в дереве, чтобы быть исполняемым файлом или не быть исполняемым файлом редко полезно; Вы, вероятно, захотите назвать этот сценарий с аргументами как +rX (капитал X, установить исполняемый бит только для каталогов и для файлов, которые уже исполняемы). На самом деле, X символьный режим, вероятно, чем Вы были после с этими сценариями: chmod -R +rX ..

С ударом или zsh, существует другой способ действовать рекурсивно, но на каталоги только. Для удара Вам нужна версия 4 и работать shopt -s globstar сначала.

chmod a+rx **/*/

В zsh можно действовать на файлы только путем добавления суффикса (.): chmod a+r **/*(.).

Я передам вопрос о Наутилусе.

10
27.01.2020, 20:11
  • 1
    дурачки! Можно ли использовать, каждый находит для выполнения различных команд на различных наборах результатов? +1 для перегрузки операции ИЛИ. –  Caleb 11.06.2011, 10:52

Я записал сценарий, который в основном делает вышеупомянутое, но также и обеспечивает немного гибкости для параметров командной строки (каталог и/или полномочия файла, или исключите обоих, которые это автоматически сбрасывает все к 755-644). Это также проверяет на несколько ошибочных сценариев.

http://bigfloppydonkeydisk.blogspot.com.au/2012/09/recursively-chmod-only-files-or.html

0
27.01.2020, 20:11
  • 1
    Необходимо вставить код здесь. Тем путем мы избегаем большого количества битых ссылок в будущем. Если Вы волнуетесь по поводу этих двух версий, расходящихся, можно все еще оставить ссылку там для ссылки. –  l0b0 22.09.2012, 11:50

Скрипт, на который ссылается user23538, надеюсь, вы не против.

Я пробовал, и он хорошо работает. Обратите внимание, что если вы используете. в качестве аргумента пути (запускайте его в том же каталоге, где находится сценарий), он фактически изменяет права доступа к файлам для собственных сценариев на 644, поэтому поместите его в каталог выше.

#!/bin/sh
#
# chmodr.sh
#
# author: Francis Byrne
# date: 2011/02/12
#
# Generic Script for recursively setting permissions for directories and files
# to defined or default permissions using chmod.
#
# Takes a path to recurse through and options for specifying directory and/or
# file permissions.
# Outputs a list of affected directories and files.
#
# If no options are specified, it recursively resets all directory and file
# permissions to the default for most OSs (dirs: 755, files: 644).

# Usage message
usage()
{
echo "Usage: $0 PATH -d DIRPERMS -f FILEPERMS"
echo "Arguments:"
echo "PATH: path to the root directory you wish to modify permissions for"
echo "Options:"
echo " -d DIRPERMS, directory permissions"
echo " -f FILEPERMS, file permissions"
exit 1
}

# Check if user entered arguments
if [ $# -lt 1 ] ; then
usage
fi

# Get options
while getopts d:f: opt
do
case "$opt" in
d) DIRPERMS="$OPTARG";;
f) FILEPERMS="$OPTARG";;
\?) usage;;
esac
done

# Shift option index so that $1 now refers to the first argument
shift $(($OPTIND - 1))

# Default directory and file permissions, if not set on command line
if [ -z "$DIRPERMS" ] && [ -z "$FILEPERMS" ] ; then
DIRPERMS=755
FILEPERMS=644
fi

# Set the root path to be the argument entered by the user
ROOT=$1

# Check if the root path is a valid directory
if [ ! -d $ROOT ] ; then
echo "$ROOT does not exist or isn't a directory!" ; exit 1
fi

# Recursively set directory/file permissions based on the permission variables
if [ -n "$DIRPERMS" ] ; then
find $ROOT -type d -print0 | xargs -0 chmod -v $DIRPERMS
fi

if [ -n "$FILEPERMS" ] ; then
find $ROOT -type f -print0 | xargs -0 chmod -v $FILEPERMS
fi
1
27.01.2020, 20:11

Теги

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