我需要一种方法来定位所有子目录,这些子目录以或其他TLDpublic_html
结尾,或者我可能会在heredocument中列出。.com
.biz
.co.il
这是我的 hereoducmnet 在一个嵌套在循环内的语句pushd-popd
中: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
有没有办法结合正则表达式来实现这一点,直接在 heredocument 重定向/附加行(在哪里ALL_DOT_COM|ALL_DOT_BIZ
)?
我假设你想追加到
.htaccess
所有目录中,比如$HOME/public_html/foo.com/
,$HOME/public_html/bar.biz/
等等。您的
for
循环已经管理处理所有目录,那么问题只是调整 glob 以匹配所需的结尾:似乎不需要
cd
, 因为dir
已经包含目录的完整路径。以上当然只会匹配列出的顶级域。(我不确定这是否是您想要的,因为您写了“或其他 TLD”。)如果您不关心目录名称上有哪个 TLD,只需使用
.../public_html/*/
, or.../public_html/*.*/
,尽管仍然假定没有其他内容在那里。(但是,列出所有TLD 有点尴尬,他们可能会想出更多...)用于附加
tee -a
到多个文件,以及一个大括号扩展。我也不认为实际上需要循环,就像
tee
一次写入多个文件的工作一样。字符串
将扩展为
然后 glob 将根据适当的子目录进行匹配。
如果存在 glob 可能不匹配任何内容的风险,您可能还应该
nullglob
在以下位置设置 shell 选项bash
:设置此选项后,不匹配任何现有文件名的 glob 模式将扩展为空字符串。
如果模式
"$HOME"/public_html/*.{com,biz,co.il}/.htaccess
扩展为太长的字符串,您可能会在运行tee
. 在这种情况下,您确实需要循环:不过仍然没有必要
cd
进入目录。