script para renombrar archivos vía ssh no me funciona (creo que son las '')
Hola Estoy intentando renombrar archivos de forma remota vía ssh necesito renombrar archivos similares a 'z01_configuraMusica.conf' a 'configuraMusica.conf' (sacarle el prefijo 'z01_'), necesitaria armar el comando: mv -vf z01_configuraMusica.conf configuraMusica.conf la idea es ejecutarlos via ssh con: ssh user@hostremoto genero comando La generación de comandos funciona de forma local, sin usar shh, cuando uso ssh parece no andar el remplazo 'z01_' por '' (supongo que estoy casteado de forma incorrecta las comillas) he probado varias formas de remplazo, como: 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 Pero al hacer: ssh user@hostremto cd /path; for ii in *.conf; do ( dest=$(echo \$ii|sed -e 's/z01_//'); echo -fv \$ii//\$dest; ) done solo me devuelve: z01_configuraMusica1.conf // z01_configuraMusica1.conf z01_configuraMusica2.conf // z01_configuraMusica2.conf z01_configuraMusica3.conf // z01_configuraMusica3.conf 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? Gracias -- 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/cadqxbrs44wfcz5x5kzsbdugqq80snrequ8a1xaimhk2oqhl...@mail.gmail.com
Re: script para renombrar archivos vía ssh no me funciona (creo que son las '')
On 11/13/2013 10:36 AM, Flako wrote: Hola Estoy intentando renombrar archivos de forma remota vía ssh necesito renombrar archivos similares a 'z01_configuraMusica.conf' a 'configuraMusica.conf' (sacarle el prefijo 'z01_'), necesitaria armar el comando: mv -vf z01_configuraMusica.conf configuraMusica.conf la idea es ejecutarlos via ssh con: ssh user@hostremoto genero comando La generación de comandos funciona de forma local, sin usar shh, cuando uso ssh parece no andar el remplazo 'z01_' por '' (supongo que estoy casteado de forma incorrecta las comillas) he probado varias formas de remplazo, como: 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 Pero al hacer: ssh user@hostremto cd /path; for ii in *.conf; do ( dest=$(echo \$ii|sed -e 's/z01_//'); echo -fv \$ii//\$dest; ) done solo me devuelve: z01_configuraMusica1.conf // z01_configuraMusica1.conf z01_configuraMusica2.conf // z01_configuraMusica2.conf z01_configuraMusica3.conf // z01_configuraMusica3.conf Buenas! El problema que tienes, es que la subshell se ejecuta en tu equipo (el $(echo ...)), y también las variables (aunque no estoy seguro cómo se comporte dentro del for) $ii, $dest, bash las expande en tu equipo y no en el remoto. Para evitar esto, en general basta con utilizar comillas simples ('') en lugar de dobles. Por otro lado, no me complicaría usando sed, lee la sección 'Parameter Expansion' del manual de bash. Saludos, 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? Gracias -- Santiago López Denazis GNU/Linux SysAdmin sldena...@gmail.com Open your source, open your mind. Por favor, no utilice formatos de archivo privativos para el intercambio de documentos, como DOC y XLS, sino HTML, PDF, TXT, CSV o cualquier otro que no obligue a utilizar un programa de un fabricante concreto. Vea http://www.gnu.org/philosophy/no-word-attachments.es.html -- -- 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/52838851.1090...@gmail.com
Re: script para renombrar archivos vía ssh no me funciona (creo que son las '')
El Wed, 13 Nov 2013 11:36:10 -0200, Flako escribió: Hola Estoy intentando renombrar archivos de forma remota vía ssh necesito renombrar archivos similares a 'z01_configuraMusica.conf' a 'configuraMusica.conf' (sacarle el prefijo 'z01_'), necesitaria armar el comando: mv -vf z01_configuraMusica.conf configuraMusica.conf la idea es ejecutarlos via ssh con: ssh user@hostremoto genero comando La generación de comandos funciona de forma local, sin usar shh, cuando uso ssh parece no andar el remplazo 'z01_' por '' (supongo que estoy casteado de forma incorrecta las comillas) he probado varias formas de remplazo, como: (...) Recuerda que también tienes el comando rename. Pero al hacer: ssh user@hostremto cd /path; for ii in *.conf; do ( dest=$(echo \$ii|sed -e 's/z01_//'); echo -fv \$ii//\$dest; ) done solo me devuelve: z01_configuraMusica1.conf // z01_configuraMusica1.conf z01_configuraMusica2.conf // z01_configuraMusica2.conf z01_configuraMusica3.conf // z01_configuraMusica3.conf 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? Hum... tendrás que escapar las comillas ¿no? :-? Saludos, -- Camaleón -- 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/pan.2013.11.13.14.47...@gmail.com
Re: script para renombrar archivos vía ssh no me funciona (creo que son las '')
Y donde esta definido tu destino o la ruta destino... tambien el fv!=mv tambien puedes usar el comando basename --- Mensaje Original --- Desde: Camaleón noela...@gmail.com Enviado: 13 de noviembre de 2013 8:47 AM Para: debian-user-spanish@lists.debian.org Asunto: Re: script para renombrar archivos vía ssh no me funciona (creo que son las '') El Wed, 13 Nov 2013 11:36:10 -0200, Flako escribió: Hola Estoy intentando renombrar archivos de forma remota vía ssh necesito renombrar archivos similares a 'z01_configuraMusica.conf' a 'configuraMusica.conf' (sacarle el prefijo 'z01_'), necesitaria armar el comando: mv -vf z01_configuraMusica.conf configuraMusica.conf la idea es ejecutarlos via ssh con: ssh user@hostremoto genero comando La generación de comandos funciona de forma local, sin usar shh, cuando uso ssh parece no andar el remplazo 'z01_' por '' (supongo que estoy casteado de forma incorrecta las comillas) he probado varias formas de remplazo, como: (...) Recuerda que también tienes el comando rename. Pero al hacer: ssh user@hostremto cd /path; for ii in *.conf; do ( dest=$(echo \$ii|sed -e 's/z01_//'); echo -fv \$ii//\$dest; ) done solo me devuelve: z01_configuraMusica1.conf // z01_configuraMusica1.conf z01_configuraMusica2.conf // z01_configuraMusica2.conf z01_configuraMusica3.conf // z01_configuraMusica3.conf 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? Hum... tendrás que escapar las comillas ¿no? :-? Saludos, -- Camaleón -- 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/pan.2013.11.13.14.47...@gmail.com -- 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/bay404-eas26300b98d00d5cabb5d9b5baa...@phx.gbl
Re: script para renombrar archivos vía ssh no me funciona (creo que son las '')
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
Re: script para renombrar archivos vía ssh no me funciona (creo que son las '')
Santiago: si es como dices, se las diferencias de y '' pero no lo había razonado como parte del error., lo del uso del sed/awk es simple costumbre... (me obliga a recordar sintaxis) Camaleón: soy de vieja escuela y me gusta usar 'mv' :), y si es verdad se llama escapear y no castear.. :( Domingo: el directorio destino es el mimos 'cd /path;', como usarías basename? (yo lo uso para sacar path o extensiones) Eduardo: voy a probar los dos ejemplos.. En fin lo implemene con dos llamadas de ssh, 1ra: para recuperar lista de archivos, luego genero un string_comando con los comandos y 2da ssh ejecuto el string_comando, no es muy prolijo, pero funciona :) después voy a probar reescribirlo en una sola llamada. Gracias -- 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/CADqxbRSidZauwrLin9yGLQzÉakt4exzhvrx4ynnxxhgef...@mail.gmail.com