.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 1
before를 추가하면 이 문제를 해결할 수 있습니다 -name
. 그러면 find
해당 디렉터리의 하위 디렉터리로의 재귀가 중지되고 강제로 최상위 수준에서 중지됩니다.
-maxdepth 1
위의 마지막 실제 루프와 거의 같은 방식 으로 find
작동하도록 추가되었습니다 .
.htaccess
두 명령 모두 발견된 파일이 실제로 디렉터리 등이 아닌 일반 파일인지 확인하려고 시도하지 않습니다 . 루프에서는 test 를 통해 이를 수행할 수 있고 -f
, find
명령 에서는 -type f
를 통해 이를 수행할 수 있습니다 -exec
.