Resposta
Se você não está preocupado com a velocidade (esta é uma tarefa única), então talvez você possa tentar isto:
cat map.txt | while read line; do
neww=${line##* };
oldw=${line%% *};
find /some/folder -type f -exec sed -i "s/$oldw/$neww/g" {} \;
done
Não é o melhor, eu sei ... :-P
PS: verifique em uma pasta de teste para ver se funciona!
Explicação
Basicamente:
- Cat file map.txt.
- Leia cada linha e faça com que a palavra seja substituída por
$oldwe a substituição$neww. - Para cada par, execute o comando find que você já estava usando (observe as aspas duplas desta vez para permitir a substituição de variáveis).
Sobre a expansão de parâmetros
Para definir as variáveis $oldw e $neww , precisamos obter a primeira e a última palavra de cada linha. Para fazer isso, estamos usando a expansão de parâmetros (pura implementação de Bash), embora pudéssemos ter usado outras maneiras de obter a primeira e a última palavra da string (por exemplo, cut ou awk ).
-
${line##* }: da variávelline, remova o maior padrão de prefixo (double#), em que pattern é qualquer caractere (*) seguido por um espaço (). Então, temos a última palavra emline. -
${line%% *}: da variávelline, remova o maior padrão de sufixo (double%), em que pattern é um espaço () seguido por qualquer caractere (*). Então, obtemos a primeira palavra emline.
As palavras foram separadas por um espaço neste caso, mas poderíamos ter usado um separador.