Crie softlinks para um arquivo em cada subpasta

2

Eu tenho um espaço na Web no qual não posso editar o arquivo php.ini principal e não posso usar o comando .htaccess para torná-lo aplicado recursivamente.

Se nós chamarmos meu diretório web D , eu gostaria de criar recursivamente um softlink em cada subdiretório de D (e todos os subdiretórios sob esses, etc) para um arquivo php.ini em D . / p>

Existe uma única instrução de linha de comando que pode ser usada para isso? Se sim, o que é isso?

Estou usando um host baseado em Linux.

    
por apnorton 05.07.2013 / 22:25

1 resposta

3

Solução Bash 4+ (com globstar ativado, ** é um glob recursivo e **/ expandirá para todos os diretórios, recursivamente):

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

Solução POSIX com find - isso funcionará em qualquer * nix:

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

Qualquer um desses deve ser executado no diretório D. ln -s é o comando para criar um link simbólico (soft) no * nix, você pode conferir mais informações sobre ele com man ln .

Para remover os links depois, você pode usar novamente o bash (assumindo a versão 4+) ou encontrar:

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

O [[ -L "$f" ]] testa para ver se $ f é um link, e && significa 'só faz a próxima coisa se o anterior for avaliado como verdadeiro' - então isso não vai acabar com o seu php original arquivo .ini '.

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

-type l (que é um L minúsculo, não um) diz ao procurador para procurar links simbólicos (suaves) apenas, o que significa que não encontrará & exclua o arquivo original 'php.ini'.

    
por 05.07.2013 / 22:59