"DATA" 문자가 포함된 폴더의 모든 파일에 대한 권한을 읽기-쓰기로 설정해 보시겠습니까? 로키리눅스

"DATA" 문자가 포함된 폴더의 모든 파일에 대한 권한을 읽기-쓰기로 설정해 보시겠습니까? 로키리눅스

특정 폴더의 모든 파일을 읽고 쓸 수 있도록 권한을 변경하려고 하는데 파일에 "DATA"라는 문자열이 있어야 합니다.

이 명령을 사용해 보았으나 어떻게 필터링해야 할지 모르겠습니다. grep을 사용해야 합니까?

grep -nr DATA | chmod u=rw,g=rw,o=rw  *

답변1

지금 삭제된 질문에 대한 댓글에서 말했듯이스택 오버플로:

grep -rl DATA "foldername" | xargs -n1 chmod =rw 

...경고: 파일 이름에 공백이 있으면 작동하지 않습니다.

저는 여러분이 실제 생활에 참여하기 전에 Linux/Unix 도구 모음 튜토리얼을 많이 읽고 도구가 어떻게 함께 작동하는지 파악하는 것을 적극 권장합니다.

귀하의 호출은 모든 것을 변경하지만 chmod기본적으로 아무것도 출력되지 않으므로 grep아무것도 출력하지 않습니다.아무것도 없다.

너 뭐야필요내 예에서 볼 수 있듯이, 필요한 것은 그 안에 있는 파일을 찾고 DATA해당 권한을 수정하는 것뿐입니다.

답변2

chmod파일에 "DATA" 문자열이 포함되어 있으면 디렉터리의 모든 파일을 재귀적으로 찾아 실행할 수 있습니다.

perm.sh:

#!/bin/bash

grep -w "DATA" "$1" && chmod 666 "$1"

find일반 파일을 재귀적으로 검색하는 경우 (감사합니다.스티븐)

find <path/of/folder> -type f -exec bash </path/of/perm.sh> {} \;

답변3

이미 사용하고 있는 GNU -r확장 덕분에 grep다음을 수행할 수 있습니다.

grep -rlZ DATA . | xargs -r0 chmod a=rw

정규식과 일치하는 행이 하나 이상 포함된 파일을 -l나열하는 데 사용됩니다 . (GNU grep l확장자 이기도 함 -Z) 출력을 사후 처리할 수 있도록 NUL로 구분된 파일 경로를 인쇄합니다.

xargs -0² 통과하려면 NUL에서 출력을 분할하세요.별도의 매개변수로유틸리티 에 chmod. ² 의 경우 -r입력이 비어 있으면(파일 경로가 보고되지 않음) xargs전혀 실행되지 않습니다.chmodgrep

이미 권한이 있는 파일을 건너뛰려면 다음을 수행하세요 rw-rw-rw-.

find . -type f ! -perm a=rw -exec grep -lZ DATA {} + |
  xargs -r0 chmod a=rw

이식 가능한 방법은 다음과 같습니다.

find . -type f \
       ! -perm a=rw \
       -exec grep -q DATA {} ';' \
       -exec chmod a=rw {} +

하지만 grep각 파일이 하나씩 실행되므로 효율성이 크게 떨어집니다.

어쨌든 세상에 쓰기 가능한 데이터 파일을 갖는 것은 매우 나쁜 생각처럼 들립니다.

또한 chmod파일의 권한을 변경할 때 심볼릭 링크를 따르므로 파일이 일반 파일에서 /etc/shadow사용자 에 대한 심볼릭 링크로 변경되는 경우 ~/.bashrc(또는 심볼릭 링크에 대한 변경 사항이 ./dir있는 경우) 파일은 다음 사이에서 발견되어 실행됩니다. 잘못된 파일에 대한 권한을 변경하게 될 수도 있습니다../dir/shadow/etcfindchmod

따라서 누구나 쓰기 가능한 디렉터리에서는 이러한 명령을 실행하고 싶지 않습니다.

GNU/Linux 시스템을 사용 중이라면 다음을 zsh통해 이러한 문제를 피할 수 있습니다.

find . -type f ! -perm a=rw -execdir zsh -c '
  zmodload zsh/system || exit
  for file do
    sysopen -o nofollow -u0 -- $file &&
      grep -q DATA &&
      chmod a=rw /dev/stdin
  done' {} +

디렉토리 트리를 내려갈 때 Where는 find기호 링크를 따르지 않도록 주의하고 -execdir명령(여기 zsh)을 사용하여 발견된 파일이 포함된 디렉토리에서 실행합니다. 심볼릭 링크( ption ) zsh를 따르지 않고 파일을 여는 일을 담당하며 Linux에서는 파일이 삭제되거나 이름이 변경된 경우에도 열린 실제 파일을 가리키도록 보장되는 열린 파일을 가리키는 마법의 심볼릭 링크입니다.nofollow o/dev/stdin/dev/stdin


일부 다른 기능은 grep이제 지원되지만 -r디렉터리 생략을 거의 허용하지 않으며 .최신 버전의 GNU에서는 / 도 사용할 grep때 기본적으로 디렉터리를 사용합니다.-r-R

² -r-0GNU 확장이지만 현재 다른 구현에서 널리 사용되고 있으며 POSIX 표준의 다음 버전에도 나타날 수 있습니다.

관련 정보