Reemplazar cadena de texto en nombre de archivo en bash?

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: maiku, akodo

Responder
Avatar de Usuario
hipersayan_x
Forista Legendario
Forista Legendario
Mensajes: 1905
Registrado: Vie Abr 27, 2007 7:00 am
Contactar:

Reemplazar cadena de texto en nombre de archivo en bash?

Mensaje por hipersayan_x »

Bien, continuando con el mismo script de este post, tengo un problema con la siguiente linea marcada en rojo;
#! /bin/bash

python_version='3.1.2'
python_folder="Python-$python_version"
python_tar_bz2="$python_folder.tar.bz2"

wget --retry-connrefused -c http://www.python.org/ftp/python/$pytho ... on_tar_bz2
tar -xjvf $python_tar_bz2
cd $python_folder
./configure LDFLAGS='-static -static-libgcc' CPPFLAGS='-static'
make
cd ..
mkdir -p python/bin python/doc python/lib
cp $python_folder/python python/bin
cp $python_folder/README python/doc
cp $python_folder/LICENSE python/doc

base_dir=$(pwd)

cd $python_folder/Lib
find . -name '*.py' -exec cp -v --parents {} $base_dir/python/lib/ \;
cd $base_dir/$python_folder/build/$(ls $base_dir/$python_folder/build|grep lib.)
find . -name '*.so' -exec cp -v --parents $(echo {}|sed 's/_failed//g') $base_dir/python/lib/ \;
cd $base_dir/$python_folder
make clean
cd $base_dir

python_sh='#! /bin/bash

export PYTHONPATH=./lib
export PYTHONPATH=./lib
./bin/python -B
'
echo $python_sh>python/python.sh
Se supone que, en un directorio hay un grupo de archivos con la forma src/archivo_failed.so y necesito copiarlos a otro quitandoles el "_failed", quedando dst/archivo.so. Eso se supone que lo tendria que hacer la linea roja, pero los copia con el nombre tal cual a como estan en el original.
Ayuda please?
Desarrollo en Qt: Qt Developer Network
Mis proyectos: github | SourceForge.net

fpuga
Forista Mayor
Forista Mayor
Mensajes: 798
Registrado: Sab Ago 25, 2007 7:00 am
Ubicación: Galicia - España
Contactar:

Re: Reemplazar cadena de texto en nombre de archivo en bash?

Mensaje por fpuga »

find y los pipes me parece que no se llevan demasiado bien. Yo trataría de usar xargs
Mi blog: [url=http://conocimientoabierto.es]Conocimiento Abierto[/url]

Avatar de Usuario
hipersayan_x
Forista Legendario
Forista Legendario
Mensajes: 1905
Registrado: Vie Abr 27, 2007 7:00 am
Contactar:

Re: Reemplazar cadena de texto en nombre de archivo en bash?

Mensaje por hipersayan_x »

Sigo sin poder lograrlo, esta es la ultima modificación, pero sigue haciendo lo que quiere
#! /bin/bash

python_version='3.1.2'
python_folder="Python-$python_version"
python_tar_bz2="$python_folder.tar.bz2"

#wget --retry-connrefused -c http://www.python.org/ftp/python/$pytho ... on_tar_bz2
tar -xjvf $python_tar_bz2
cd $python_folder
./configure LDFLAGS='-static -static-libgcc' CPPFLAGS='-static'
make
cd ..
mkdir -p python/bin python/doc python/lib
cp $python_folder/python python/bin
cp $python_folder/README python/doc
cp $python_folder/LICENSE python/doc

base_dir=$(pwd)

cd $python_folder/Lib
find . -name '*.py' -exec cp -v --parents {} $base_dir/python/lib/ \;
din_libs_dir=$base_dir/$python_folder/build/$(ls $base_dir/$python_folder/build|grep lib.)
cd $din_libs_dir
#find . -name '*.so' -exec cp -v --parents $(echo echo {}|sed s/_failed//g) $base_dir/python/lib/ \;
find . -name '*.so'|xargs -0 -I filename cp -v --parents $(echo echo $din_libs_dir/filename|sed 's/_failed//g') $base_dir/python/lib/
cd $base_dir/$python_folder
make clean
cd $base_dir

python_sh='#! /bin/bash

export PYTHONPATH=./lib
export PYTHONPATH=./lib
./bin/python -B
'
echo $python_sh>python/python.sh
La linea marcada en rojo(para xarg), me da este error:

Código: Seleccionar todo

cp: no se puede efectuar `stat' sobre «echo»: No existe el fichero o el directorio
/home -> /home/hipersayan_x/tmp/MyPython/python/lib/home
/home/hipersayan_x -> /home/hipersayan_x/tmp/MyPython/python/lib/home/hipersayan_x
/home/hipersayan_x/tmp -> /home/hipersayan_x/tmp/MyPython/python/lib/home/hipersayan_x/tmp
/home/hipersayan_x/tmp/MyPython -> /home/hipersayan_x/tmp/MyPython/python/lib/home/hipersayan_x/tmp/MyPython
/home/hipersayan_x/tmp/MyPython/Python-3.1.2 -> /home/hipersayan_x/tmp/MyPython/python/lib/home/hipersayan_x/tmp/MyPython/Python-3.1.2
/home/hipersayan_x/tmp/MyPython/Python-3.1.2/build -> /home/hipersayan_x/tmp/MyPython/python/lib/home/hipersayan_x/tmp/MyPython/Python-3.1.2/build
/home/hipersayan_x/tmp/MyPython/Python-3.1.2/build/lib.linux-i686-3.1 -> /home/hipersayan_x/tmp/MyPython/python/lib/home/hipersayan_x/tmp/MyPython/Python-3.1.2/build/lib.linux-i686-3.1
cp: fallo al obtener los permisos de «/home/hipersayan_x/tmp/MyPython/Python-3.1.2/build/lib.linux-i686-3.1/./array_failed.so\n.»: No existe el fichero o el directorio
Pero si coloco esto(en la terminal):

Código: Seleccionar todo

# $(echo echo /home/hipersayan_x/tmp/MyPython/archivo_failed.so|sed 's/_failed//g')
/home/hipersayan_x/tmp/MyPython/archivo.so
Funciona perfectamente.
Realmente no entiendo que es lo que esta mal, me leí el manual de bash, busque en internet y no encuentro nada de información :(
Desarrollo en Qt: Qt Developer Network
Mis proyectos: github | SourceForge.net

Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: Reemplazar cadena de texto en nombre de archivo en bash?

Mensaje por akodo »

Eso de "$( $.... )" no lo tengo muy claro...
Creo que deberías plantearte hacer una función, de forma que dado un nombre de fichero te haga lo que quieres (mostrar "el antes y el después", hacer la copia del fichero, etc), al menos no quedaría tan confuso.
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])

Responder
  • Temas similares
    Respuestas
    Vistas
    Último mensaje