Com base em Como evito que o sed -i destrua links simbólicos? , mas eu uso Perl.
Eu tentei no meio de todas essas perguntas:
- Existe uma maneira de fazer perl -i not clobber symlinks?
- link simbólico perl no arquivo gz
- Como evito que o sed destrua hardinks?
Foi sem sucesso. Aqui está a pequena e simples amostra:
#!/bin/perl
use strict; use warnings;
while (<>)
{
## For all lines, replace all occurrences of #5c616c with another colour
s/#5c616c/#8bbac9/g $(readlink -e -- "<>")
## $(readlink -e -- "<>") is similar to --in-place --follow-symlinks
## Print the line
print;
}
O
readlink -e
comando não é portátil, portanto, não deve ser confiável.Dentro do código Perl, em vez disso, substitua os links pelo nome do arquivo para o qual ele aponta usando a função Perl e
readlink
, em seguida, faça um loop sobre a entrada como de costume.alink
ainda é um link simbólico e o conteúdo deinput
foi modificado:Dentro de um script Perl, isso pode ser algo como
embora possa ser necessário
List::Util::uniq
ou similar para evitar modificar o mesmo nome de arquivo duas ou mais vezes, se a entrada contiver nomes de arquivo duplicados.