es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Reemplazo de cadena en el shell de Linux

Tengo este nombre de archivo que contiene 3 espacios en blanco que extraje de una base de datos de acceso, se ve así, comillas simples incluidas =>>> ‘Test de map.csv’
Estoy tratando de reemplazar los espacios en blanco por guiones bajos dentro de un bucle for, dentro de un archivo .sh, desafortunadamente, no parece funcionar con:

for file in `ls *.csv`; do
        mv "$file" `echo "$file" | tr -s ' ' | tr ' ' '_'`
mv "$file" `echo "$file" |  sed -e "s/ /_/g" -e "s/[\[{\\']//g"`
find . -name "* *" -type f | rename "s/ /_/g"

done


Mientras que funciona perfectamente cuando escribo directamente este comando:

mv ‘Test de map.csv’ echo 'Test de map.csv' | tr -s ' ' | tr ' ' '_'
“`

¿Alguien podría ayudar?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución

    El problema parece estar en el uso del comando ls dentro del bucle for, ya que puede causar problemas con los nombres de archivo que contienen caracteres especiales como espacios. Una mejor manera de recorrer archivos en un directorio es utilizar shell globbing.

    Prueba la siguiente solución donde utilizamos shell globbing para recorrer archivos en el directorio y luego utilizamos la expansión de parámetros para reemplazar espacios por guiones bajos en el nombre de archivo:

    for file in *.csv; do
       mv -v "$file" "${file// /_}"
    done
    

    La expresión ${file// /_} utiliza la expansión de parámetros para reemplazar todos los espacios en el nombre de archivo por guiones bajos.

    Ten en cuenta que hemos utilizado la bandera -v con el comando mv para mostrar una salida detallada en la consola, para que puedas ver qué archivos se están renombrando. Puedes eliminar esta bandera para ejecutar el comando en silencio.

    Además, asegúrate de poner comillas a las variables ("${file// /_}" y "$file") para evitar problemas de división y expansión de globbing.

    ¡Espero que esto ayude!

Comments are closed.