현재 디렉토리의 모든 파일을 chown/chmod하는 방법은 무엇입니까?

현재 디렉토리의 모든 파일을 chown/chmod하는 방법은 무엇입니까?

현재 디렉터리에 있는 일부 파일(및 디렉터리)의 소유권과 권한을 변경하려고 합니다. 나는 이것을 시도했다:

chown username:groupname .

...현재 디렉터리의 모든 파일에 영향을 미칠 것으로 예상하지만 대신 내가 있는 디렉터리에만 영향을 미칩니다(이는 내가 원하는 것과 반대입니다). 내가 있는 현재 디렉토리에 영향을 주지 않고 모든 파일에서 이를 변경하고 싶습니다.

현재 디렉터리의 모든 파일을 chown 및 chmod하려면 어떻게 해야 합니까?

답변1

를 사용 chown username:groupname *하고 쉘이 *현재 디렉토리의 내용으로 확장되도록 하려고 합니다. 이렇게 하면 현재 디렉터리의 모든 파일/폴더에 대한 권한이 변경되지만 폴더의 내용은 변경되지 않습니다.

또한 chown -R username:groupname .현재 디렉터리에 대한 권한을 변경한 다음 해당 디렉터리와 모든 하위 폴더 내부에서 재귀적으로 권한을 변경하는 작업을 수행할 수도 있습니다.

chown -R username:groupname *현재 디렉터리 자체는 그대로 두고 모든 파일과 폴더에 대한 권한을 반복적으로 변경합니다. 이 스타일과 첫 번째 스타일은 제가 가장 자주 사용하는 스타일입니다.

답변2

내 생각엔 당신이 이것을 원하는 것 같아요:

chown username:groupname *

하위 디렉터리도 재귀적으로 변경하려면 -R( -r더 이상 사용되지 않음) 스위치가 필요합니다.

chown -R username:groupname *

답변3

chown당신이 슈퍼유저라면 좋습니다. 다른 사람이 make내 디렉터리에서 실행했고 이제 내가 수정할 수 없는 일부 파일을 소유하고 있는 문제가 있었습니다 . 파일과 디렉토리를 처리하는 해결 방법은 다음과 같습니다. 단 .mkmeowner, 삭제할 수 없는 경우 디렉토리에 접미사를 붙여 그대로 둡니다 .

  • 다음 스크립트는 전달된 파일 및 디렉터리의 소유권을 현재 사용자가 소유하도록 변경하고, 현재 사용자가 소유하지 않은 모든 디렉터리 또는 파일의 새 복사본을 만들어 권한 문제를 해결하려고 시도하고, 삭제(또는 삭제를 시도)합니다. 원본 파일을 삭제하고 적절하게 이름을 바꿉니다.
  • "make me owner"의 약어가 되도록 의도한 것입니다. 밑줄은 입력하기 힘들기 때문에 사용하지 않습니다.

예:

% mkmeowner .

% mkmeowner dirpath1 dirpath2
  • mkmeownerone경로에 다음 스크립트가 있어야 합니다 .

mkme소유자:

#!/bin/bash
[ "x$1" == "x-h" ] || [ "x$1" == "x--help" ] && cat << END && exit 0
Usage: $0 dirorfile [direorfile2 ...]:
    change ownership of directories or files to current user.
    Current user must have permissions to read those and write to owner directory.
END
mkmeownerone=`which mkmeownerone`
for d in $*; do
    find "$d" -not -user `whoami` -exec $mkmeownerone {} \;
done

mkmeownerone:

#!/bin/bash
# change ownership of one file or directory
f="$1"
expr match "${f}" '.*\.mkmeowner$' > /dev/null && exit 1 # already tried to do this one
if mv -f "$f" "${f}.mkmeowner"; then
    cp -pr "${f}.mkmeowner" "$f" && rm -rf "${f}.mkmeowner"
    exit 0
fi
exit 1

답변4

username:groupname현재 디렉터리의 모든 파일을 변경하는 또 다른 방법은 하위 쉘을 사용하는 것입니다.

chown username:groupname $(find . -name "[a-zA-Z0-9]*")

bash 내장 명령은 보다 복잡한 관리 작업의 기초를 형성할 수 있는 하위 쉘의 find정규 표현식과 함께 사용됩니다 .[a-zA-Z0-9]*$()

관련 정보