
Estoy usando el siguiente comando (en Solaris) para eliminar el protocolo de varios archivos.
find . -name "*.txt" -exec perl -pi -e 's/http//g' '{}' \;
¿Hay alguna manera de tener una salida detallada para poder obtener un informe de qué archivos se han editado?
Gracias, andy
Respuesta1
Podrías obtener un recuento de sustituciones por archivo con:
find . -type f -exec perl -pi -e '
$count{$ARGV} += s/http//g;
END {for (keys %count) {print "$_: $count{$_}\n" if $count{$_}}}' {} +
Tenga en cuenta que en esa y en su solución original, perl
se reescribirán los archivos independientemente de si los sustituye o no.
No lo use ;
para terminar el -exec
comando. perl
Puede manejar varios archivos a la vez, no es necesario llamar a un Perl por archivo.
Si solo desea esa salida sin realizar las sustituciones, simplemente reemplácela -pi
con -n
en el comando anterior.
También puedes hacer:
find . -type f -exec grep -c http /dev/null {} +
Para obtener un recuento delíneasque contiene http
(no necesariamente el mismo que el número de http
apariciones).
Respuesta2
Puede obtener un informe de qué archivos se envían a Perl utilizando ambos -print
y -exec
:
find . -name "*.txt" -print -exec perl -pi -e 's/http//g' '{}' \;
Si desea saber qué archivos se modificaron, entonces algo como
find . -name "*.txt" \
-exec perl -i.bak -pe 's/http//g' '{}' \; \
-exec sh -c 'cmp -s "$1" "$1.bak" && echo "$1" || rm "$1.bak"' _ '{}' \;