Por favor, revise estes códigos que visam fazer basicamente a mesma tarefa (encontrar o principal .htaccess
do site e alterá-lo):
for dir in "$HOME"/public_html/*.{com,co.il}/; do
if pushd "$dir"; then
chmod 644 .htaccess
popd
fi
done 2>/dev/null
e:
find "$HOME"/public_html/*.{com,co.il} -name ".htaccess" -exec chmod 644 {} \;
Isso também deve afetar os .htaccess
arquivos em subdiretórios de cada diretório em public_html
?
De fato, o primeiro loop considera apenas os arquivos na estrutura de diretório imediata que você listou (com os curingas preenchidos, é claro). O
find
comando que você listou não se restringe a nenhum nível de estrutura de diretórios e seria executadochmod
em todo e qualquer arquivo chamado .htaccess na árvore de diretórios.Para restringir o
find
comando apenas à estrutura de diretórios em que ele inicia (observando que você deu a ele, via globs, vários diretórios iniciais), adicione o-maxdepth 1
predicado:Seu primeiro trecho de código:
Isso pode ser reescrito sem entrar e sair dos diretórios, como
e até ser encurtado (ou pelo menos modificado) disso para
que, se não houver muitos desses arquivos, pode ser feito com
Isso apenas examina os
.htaccess
arquivos em subdiretórios depublic_html
, e não mais abaixo na estrutura de diretórios.Observe que as duas últimas variações não tentarão
chmod
arquivos ausentes. O loop original e minha primeira variante assumem que existem.htaccess
arquivoschmod
nos diretórios fornecidos, enquanto as duas últimas variantes apenas fazem um loop sobre os.htaccess
arquivos que estão realmente presentes. Os loops anteriores dão a você a oportunidade de testar se um diretório contém tal arquivo (o que você não faz), enquanto os comandos posteriores assumem que os.htaccess
arquivos que estão lá são os únicos com os quais precisamos nos preocupar.Seu segundo trecho de código:
Isso, por outro lado, procura
.htaccess
arquivos em qualquer lugar dentro ou abaixo dos diretórios definidos por"$HOME"/public_html/*.{com,co.il}
. Você pode remediar isso adicionando-maxdepth 1
antes-name
. Isso impediriafind
a recursão para os subdiretórios dos diretórios fornecidos e o forçaria a parar no nível superior.Adicionar
-maxdepth 1
afind
faz com que funcione praticamente da mesma maneira que meu último loop real acima.Nenhum dos dois comandos tenta verificar se os
.htaccess
arquivos encontrados são realmente arquivos regulares e não diretórios etc. Em seu loop, você pode fazer isso com um-f
teste, e nofind
comando, você pode fazer isso dizendo-type f
antes do-exec
.