bash archivos con espacios

Trabajar con archivos que contienen espacios puede ser un dolor de cabeza con bash.

Aquí dejo un ejemplo de como hacerlo.

En este ejemplo vamos a buscar los archivos que subversion nos indica que han sido modificados:

# Se definie el fin de linea como el separador entre parámetros
DIFS="$IFS" ; IFS=$'\n'
echo
for x in $(svn status | grep ^M | awk -v FS='M      ' '{printf "\n%s",$2}') ; do
echo - "$x"
parametros="$parametros '$x'"
done
IFS="$DIFS"
echo
read -n 1 -s -p 'Añadir (s/n): ' OPCION
if [ "$OPCION" = 's' ] ; then
cmd="$cmd $parametros" ; eval $cmd
fi

Añadimos en un array los archivos recibidos:

declare -a e_archivos_seleccionados=()
c=0
while [ -n "$1" ]; do
echo - "$c) $1"
e_archivos_seleccionados[$c]="$1"
shift 1
let c=c+1
done

Añadimos lista de archivos a base de datos:

for c in `seq 0 ${#e_archivos_seleccionados[*]}` ; do

x="${e_archivos_seleccionados[$c]}"
echo "- $x"
# Comprobar que no este ya en la base de datos
SQL="SELECT nombre from rMovimientoArchivos WHERE nombre='$x' AND idMovimiento=$movimientoId"
SALIDA=`ejecutarSQL "$SQL" "-N"`

if [ "$SALIDA" != "$x" ] ; then

SQL="INSERT INTO rMovimientoArchivos VALUES ($movimientoId,'$x')"
ejecutarSQL "$SQL"
if [ "$?" != "0" ] ; then
mensajes "Archivo: $x no fue añadido a movimiento: $movimientoId"
else
mensajes "Archivo: $x añadido a movimiento: $movimientoId"
fi

fi

done

Pasar un array de archivos a un comando colocando comillas para que no de problemas.:

parametros="$(for n in `seq 0 $((${#aSALIDA[*]}-1))` ; do echo -n "'${aSALIDA[$n]}' " ; done)"
cmd="$mt_editor_dev $parametros"
eval "$cmd"
Leave a Reply

Your email address will not be published. Required fields are marked *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

LesOlivex