하위 디렉터리가 루프(또는 검색)의 영향을 받지 않는지 확인하세요.

하위 디렉터리가 루프(또는 검색)의 영향을 받지 않는지 확인하세요.

.htaccess본질적으로 동일한 작업( 사이트의 주요 콘텐츠 찾기 및 변경) 을 수행하도록 설계된 다음 코드를 살펴보세요 .

for dir in "$HOME"/public_html/*.{com,co.il}/; do 
  if pushd "$dir"; then 
    chmod 644 .htaccess 
    popd 
  fi 
done 2>/dev/null 

그리고:

find "$HOME"/public_html/*.{com,co.il} -name ".htaccess" -exec chmod 644 {} \;

이것이 .htaccess각 디렉토리의 하위 디렉토리에 있는 파일에도 영향을 미치나요 public_html?

답변1

실제로 첫 번째 루프는 나열된 디렉터리 구조에 있는 파일만 고려합니다(물론 와일드카드가 채워져 있음). 나열된 명령은 find모든 수준의 디렉터리 구조로 제한되지 않으며 chmod모든 디렉터리 구조에서 실행될 수 있습니다.그리고 다디렉터리 트리에 .htaccess라는 파일이 있습니다.

명령을 시작 디렉터리 구조로만 제한 하려면 find(glob을 통해 여러 시작 디렉터리를 지정했음을 참고하세요) 조건자를 추가하세요 -maxdepth 1.

find "$HOME"/public_html/*.{com,co.il} -maxdepth 1 -name ".htaccess" -exec chmod 644 {} \;

답변2

첫 번째 코드 조각:

for dir in "$HOME"/public_html/*.{com,co.il}/; do 
  if pushd "$dir"; then 
    chmod 644 .htaccess 
    popd 
  fi 
done 2>/dev/null 

이는 다음과 같이 디렉터리에 들어가거나 나가지 않고 재정의될 수 있습니다.

for dir in "$HOME"/public_html/*.{com,co.il}/; do 
    chmod 644 "$dir/.htaccess" 
done 2>/dev/null 

이는 다음과 같이 단축되거나 최소한 수정될 수도 있습니다.

for pathname in "$HOME"/public_html/*.{com,co.il}/.htaccess; do 
    chmod 644 "$pathname" 
done 2>/dev/null 

이러한 파일이 너무 많지 않으면 다음을 수행할 수 있습니다.

chmod 644 "$HOME"/public_html/*.{com,co.il}/.htaccess 2>/dev/null

이는 디렉토리 구조를 자세히 살펴보는 대신 .htaccess하위 디렉토리에 있는 파일 만 살펴봅니다.public_html

마지막 두 변종은 chmod파일 손실을 시도하지 않습니다. 원래 루프와 첫 번째 변형가설특정 디렉토리에 파일이 있으며 .htaccess마지막 두 변형은 실제로 존재하는 파일을 반복합니다. 이전 루프는 디렉터리에 그러한 파일이 포함되어 있는지 여부를 테스트할 수 있는 기회를 제공하는 반면(사용자는 수행하지 않음), 이후 명령에서는 해당 파일이 우리가 관심을 가져야 할 유일한 파일이라고 가정합니다.chmod.htaccess.htaccess

두 번째 코드 조각:

find "$HOME"/public_html/*.{com,co.il} -name ".htaccess" -exec chmod 644 {} \;

반면 .htaccess에 로 정의된 디렉토리나 디렉토리 아래의 파일을 찾습니다 "$HOME"/public_html/*.{com,co.il}. -maxdepth 1before를 추가하면 이 문제를 해결할 수 있습니다 -name. 그러면 find해당 디렉터리의 하위 디렉터리로의 재귀가 중지되고 강제로 최상위 수준에서 중지됩니다.

-maxdepth 1위의 마지막 실제 루프와 거의 같은 방식 으로 find작동하도록 추가되었습니다 .

.htaccess두 명령 모두 발견된 파일이 실제로 디렉터리 등이 아닌 일반 파일인지 확인하려고 시도하지 않습니다 . 루프에서는 test 를 통해 이를 수행할 수 있고 -f, find명령 에서는 -type f를 통해 이를 수행할 수 있습니다 -exec.

관련 정보