Проблемы с Solaris 11.4 в VirtualBox

Ваш первый фрагмент кода:

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перед -name. Это остановит findрекурсию вниз в подкаталоги заданных каталогов и заставит его остановиться на верхнем уровне.

Добавление -maxdepth 1к findзаставляет его работать почти так же, как мой последний фактический цикл выше.

Ни одна из двух команд не пытается проверить, что найденные файлы .htaccessна самом деле являются обычными файлами, а не каталогами и т. д. В своем цикле вы можете сделать это с помощью теста -f, а в команде findвы можете сделать это, сказав -type fперед -exec.

0
17.12.2020, 18:40
0 ответов

Теги

Похожие вопросы