Visto che mi è capitato di doverlo fare, ricordiamoci con si fa il trova e sostituisci (search and replace) all’interno di files in linux.
Quindi il search and replace all’interno di tutti i files a partire dalla directory corrente in linux si fa così:
find ./ -type f | xargs sed -i ‘s/string1/string2/’
(sidenote: sostituite le virgolette che wordpress di ostina a voler scrivere(‘), con l’apice singolo normale)
Questo comando cerca (comando find), ricorsivamente, tutti i file (parametro -type f) a partire dalla directory corrente(parametro ./), e li passa come input (| xargs) a sed che provvede ad applicare la sostituzione di string1 con string2 all’interno del file in lavorazione.
L’unica cosa, se nelle cartelle sottostanti ci dovesse essere qualche file/cartella con spazi nei nomi (si, a volte capita, lol) il comando precedente restituisce un errore e passa al successivo, in quanto ogni singolo termine viene inviato come input a sed, che quindi non trova il file e ci avverte.
Un altro metodo, che forse fa risparmiare un po’ di risorse (ma non è detto eh) è il seguente:
grep -rl ‘string1′ /percorso/alla/cartella/ | xargs sed -i ‘s/string1/string2/’
Il concetto è molto simile al precedente con la diversità che questo comando cerca, e passa come parametro, solo i files che contengono la stringa da sostituire e li passa a sed, che effettua la sostituzione: questa prima operazione è fatta dal comando ‘grep‘ di cui, tra l’altro avevo già parlato eoni fa (lol).