재귀적으로 폴더만 chmod하거나 스크립트 또는 노틸러스 메뉴를 통해 파일만 chmod합니까?

재귀적으로 폴더만 chmod하거나 스크립트 또는 노틸러스 메뉴를 통해 파일만 chmod합니까?

이는 이전에 논의된 적이 있습니다.여기.

내가 알고 싶은 것은 이것을 변환하는 방법입니다.

이 폴더에 있는 파일만 재귀적으로 chmod합니다.

find . -type f -exec chmod 0600 {} \;

이 폴더 내의 재귀적 chmod 폴더만:

find . -type d -exec chmod 0755 {} \;

bash 스크립트로 변환하면 다음과 같이 보일 수 있습니다.

파일의 경우:

rchmodf 744 .

디렉토리의 경우:

rchmodd 755 .

그리고...가능하다면 노틸러스 마우스 오른쪽 버튼 클릭 메뉴 옵션에 들어갈 수도 있습니다.

답변1

패턴을 첫 번째 인수로 전달하고 하나 이상의 디렉터리 이름을 후속 인수로 전달하여 다음 스크립트를 호출할 수 있습니다. 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 ..

bash 또는 zsh를 사용하는 또 다른 재귀 방법이 있지만 디렉토리에만 해당됩니다. Bash의 경우 버전 4가 필요하며 먼저 실행하세요 shopt -s globstar.

chmod a+rx **/*/

zsh에서는 접미사 :가 있는 (.)파일에만 작업 할 수 있습니다 chmod a+r **/*(.).

노틸러스의 질문을 전달하겠습니다.

답변2

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

답변3

나는 기본적으로 위의 작업을 수행하지만 명령줄 옵션(디렉터리 및/또는 파일 권한 또는 둘 다를 제외하고 모든 것을 자동으로 755-644로 재설정)에 유연성을 제공하는 스크립트를 작성했습니다. 또한 일부 오류 조건도 확인합니다.

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

관련 정보