Eliminar/eliminar una cadena de caracteres de los nombres de archivos

Eliminar/eliminar una cadena de caracteres de los nombres de archivos

Tengo un montón de archivos de texto que terminan con la línea www.thethinkfoundation.org, por ejemplo:

file1.www.thethinkfoundation.org.txt
file2.www.thethinkfoundation.org.txt
.
.
.

file100.www.thethinkfoundation.org.txt

Deseo eliminar/eliminarwww.thethinkfoundation.org

Probé el siguiente comando en una terminal para lograrlo:

for f in www.thethinkfoundation.org*; do mv "$f" "${f#thethinkfoundation.org}"; done

El resultado fue:

file1..txt
file2..txt
.
.
.

file100..txt

Gracias de antemano por una solución que funcione.

PD: no deseo utilizar el renamecomando. De hecho, estoy buscando uno que funcione en distribuciones Linux y *BSD. Mi editor de texto preferido es nano.

Respuesta1

Reemplazo de subcadena basado enExpansión de parámetros de Shellin bashy algunos otros shells también se pueden lograr de dos maneras:

Primero, puedes reemplazarsolo la primera ocurrencia(de izquierda a derecha) de un patrón como este:

${var/pattern/replacement}

Segundo, puedes reemplazartodas las ocurrenciasde un patrón como este:

${var//pattern/replacement}

¿Dónde varestá la variable/parámetro que contiene la cadena y patternes el patrón que desea buscar y reemplazar en esa cadena y replacementes el reemplazo que desea sustituir patterncon el que también se puede dejar vacío, es decir, ${var//pattern/}si desea simplemente eliminar ese patrón? de la cuerda.

Por lo tanto, la solución deseada se vería así:

for f in *www.thethinkfoundation.org*; do
    echo mv -n -- "$f" "${f//www.thethinkfoundation.org./}"
done

Agregué echoun ensayo para que puedas probarlo primero y luego sacarlo echoy ejecutarlo nuevamente para hacer el trabajo real.

información relacionada