2

У меня есть веб-пространство, в котором я не могу редактировать основной файл php.ini , и я не могу использовать команду .htaccess чтобы сделать его рекурсивно примененным.

Если мы назовем мой веб-каталог D , я бы хотел рекурсивно создать мягкую ссылку в каждом подкаталоге D (и в каждом подкаталоге в них и т.д.) На файл php.ini в D

Есть ли один оператор командной строки, который может быть использован для этого? Если так, то, что это?

Я использую хост на базе Linux.

1 ответ1

3

Решение Bash 4+ (с включенным globstar ** является рекурсивным глобусом и **/ будет рекурсивно расширяться до каждого каталога):

shopt -s globstar
for f in ./**/; do ln -s php.ini "$f"php.ini; done

POSIX решение с find - это будет работать на любом * nix:

find . -type d -exec ln -s php.ini '{}'/php.ini \;

Любой из них должен быть запущен в каталоге D. ln -s - это команда для создания символической (мягкой) ссылки в * nix, вы можете получить дополнительную информацию об этом с помощью man ln .

Чтобы впоследствии удалить ссылки, вы можете снова использовать либо bash (при условии версии 4+), либо найти:

shopt -s globstar
for f in ./**/php.ini; do [[ -L "$f" ]] && rm "$f"; done

[[ -L "$f" ]] проверяет, является ли $ f мягкой связью, а && означает «делать следующее, только если предыдущий оценивается как true», так что это не избавит вас от оригинала. Файл php.ini.

find . -type l -name 'php.ini' -delete

-type l (это строчная буква L, а не единица) указывает, что find ищет только символические (мягкие) ссылки, что означает, что он не найдет и не удалит ваш исходный файл php.ini.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .