> for ii in *.conf; do ( dest=$(echo $ii|sed -e 's/z01_//'); echo mv -fv > $ii//$dest; ) done > for ii in *.conf; do ( dest=$(echo $ii | tr -d 'z01_'); echo mv -fv > $ii//$dest; ) done > for ii in *.conf; do ( dest=$(echo $ii | awk -v a="z01_" > '{gsub(a,"",$0); print $0}'); echo -fv $ii -- $dest; ) done Primero que nada, te recomiendo que evites la forma:
var=$(echo "$var" | comando) Por varias razones: 1) «echo "$var"» falla para ciertos valores de "$var", y el comando echo varía de shell a shell. Unos interpretan los \n otros no, etc. 2) Siempre, siempre, protege una expansión de variable con comillas dobles. «"$var"» -> bien, «$var» -> mal. A menos de que realmente sepas lo que estás haciendo y conozcas las implicaciones de no hacerlo (que se partirá en múltiples palabras según la variable IFS y también expandirá los patrones como * y ?) 3) La diferencia entre "..." y '...' es que "..." permite expansiones de variables y también sustituciones de comandos «$(foo)». '...' no permite absolutamente nada, ni siquiera una comilla sencilla. > ssh user@hostremto "cd /path; for ii in *.conf; do ( dest=$(echo > \$ii|sed -e 's/z01_//'); echo -fv \$ii//\$dest; ) done" Como comentaba otro listero, al usar "..." las expansiones $(...) se ejecutan en la shell local, no en la remota. Tienes que proteger el comando que mandas a SSH con comillas sencillas para evitar este problema. > como que no toma el remplazo de 'z01_' por '', la verdad que luego de > horas de probar diferentes combinaciones de he desistido. > Tengo un error de concepto? como debería castear las comillas para > hacer que funcione? Mira, abajo te dejo una opción que puedes usar, con una demostración de que funciona: $ ssh "$host" 'mkdir -p foo/bar; touch foo/bar/z01_configuraMusica{1..5}.conf'; $ ssh "$host" 'cd foo/bar; for file in *.conf; do echo mv "$file" "${file#*_}"; done' mv z01_configuraMusica1.conf configuraMusica1.conf mv z01_configuraMusica2.conf configuraMusica2.conf mv z01_configuraMusica3.conf configuraMusica3.conf mv z01_configuraMusica4.conf configuraMusica4.conf mv z01_configuraMusica5.conf configuraMusica5.conf Cuando verifiques que hace lo que quieres, quita el echo. Para entender qué hace la expansión «${file#*_}», debes saber que a estas expansiones se les llaman expansiones de parámetros, y son nativas al shell. Lo que hace la expansión ${var#patrón} en específico es remover «patrón» del inicio de la variable "$var", así que si tienes: var=hola; echo "${var#ho}", el resultado será «la». En nuestro caso, usamos el patrón *_, que significa, quita hasta el primer «_», y todo lo que está antes. Otra forma de hacerlo habría sido: "${file#z01_}", si quieres ser más explícito. -- Eduardo Alan Bustamante López -- To UNSUBSCRIBE, email to debian-user-spanish-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20131113154429.ga9...@dualbus.me