public_html
또는 other로 끝나는 모든 하위 디렉터리를 찾을 수 있는 방법이 필요합니다 ..com
최상위 도메인좋아요를 누르 .biz
거나 .co.il
나열할 수도 있습니다.여기 문서.
pushd-popd
루프 안에 중첩된 - 문 안에 있는 내 hereoducmnet은 다음과 같습니다 .if-fi
for
for dir in "$HOME"/public_html/*/; do
if pushd "$dir"; then
cat <<-"EOF" >> "$HOME"/public_html/ALL_DOT_COM|ALL_DOT_BIZ/.htaccess
Apache_directive_set_1
Apache_directive_set_2
popd
EOF
fi
done 2>myErrors.txt
이를 달성하기 위해 정규 표현식을 여기 문서 리디렉션/추가 줄(여기서) 내에서 직접 결합하는 방법이 있습니까 ALL_DOT_COM|ALL_DOT_BIZ
?
답변1
나는 당신이 등과 같은 .htaccess
모든 디렉토리 에 추가하고 싶다고 가정합니다.$HOME/public_html/foo.com/
$HOME/public_html/bar.biz/
루프 for
는 이미 모든 디렉토리를 처리하고 있습니다. 문제는 원하는 결말과 일치하도록 glob을 조정하는 것입니다.
for dir in "$HOME"/public_html/*.{com,biz,co.il}/; do
cat <<-"EOF" >> "$dir"/.htaccess
Apache directives...
...
EOF
done 2>myErrors.txt
디렉토리의 전체 경로가 이미 포함되어 있으므로 cd
필요 하지 않은 것 같습니다 .dir
물론 위의 내용은 나열된 최상위 도메인과만 일치합니다. ("또는 다른 TLD"라고 썼기 때문에 이것이 원하는 것인지 확실하지 않습니다.) 디렉토리 이름에 어떤 TLD가 있는지 상관하지 않으면 , .../public_html/*/
또는 를 사용하십시오 .../public_html/*.*/
. 그러나 여전히 다른 것은 없다고 가정합니다. (단, 목록모두TLD는 약간 어색합니다. 더 많은 내용이 나올 수도 있습니다...)
답변2
tee -a
여러 파일에 추가하고 중괄호 확장 용 입니다.
tee
또한 한 번에 여러 파일을 작성하는 경우 처럼 루프가 실제로 필요하다고 생각하지 않습니다 .
cat <<-"EOF" | tee -a "$HOME"/public_html/*.{com,biz,co.il}/.htaccess
Apache_directive_set_1
Apache_directive_set_2
EOF
끈
"$HOME"/public_html/*.{com,biz,co.il}/.htaccess
로 확장됩니다
/home/something/public_html/*.com/.htaccess /home/something/public_html/*.biz/.htaccess /home/something/public_html/*.co.il/.htaccess
그런 다음 glob은 적절한 하위 디렉터리를 기반으로 일치 작업을 수행합니다.
glob이 어떤 것과도 일치하지 않을 위험이 있는 경우 다음 nullglob
에서 쉘 옵션을 설정 해야 할 수도 있습니다 bash
.
shopt -s nullglob
이 옵션을 설정하면 기존 파일 이름과 일치하지 않는 전역 패턴이 빈 문자열로 확장됩니다.
패턴이 "$HOME"/public_html/*.{com,biz,co.il}/.htaccess
너무 긴 문자열로 확장되면 런타임에 문제가 발생할 수 있습니다 tee
. 이 경우 당신은하다반복해야 할 사항:
for dir in "$HOME"/public_html/*.{com,biz,co.il}/
do
cat <<-"EOF" >>"$dir/.htaccess"
Apache_directive_set_1
Apache_directive_set_2
EOF
done
그러나 여전히 cd
디렉토리에 들어갈 필요는 없습니다.