Comando cp, copiar sin sobreescribir -solucionado-
Re: Comando cp, copiar sin sobreescribir
Esta vez si funcionó, ahora ya coinciden los valores de find y el número de archivos copiados, por lo que ya puedo dar por soluconado y muchas gracias
Re: Comando cp, copiar sin sobreescribir -solucionado-
De vez en cuando me aburro y, como los nacidos en África del Este, me pongo a revisar scripts.
Va otra versión. No mejora nada, y ni siquiera reviste más utilidad que la versión anterior. Pero puede servirle a alguien que quiera saber cómo implementar una barra de progreso en dialog.
Sobre todo, por la imposibilidad de Bash de calcular números decimales y, por lo tanto, calcular el porcentaje de manera más o menos racional.

Va otra versión. No mejora nada, y ni siquiera reviste más utilidad que la versión anterior. Pero puede servirle a alguien que quiera saber cómo implementar una barra de progreso en dialog.
Sobre todo, por la imposibilidad de Bash de calcular números decimales y, por lo tanto, calcular el porcentaje de manera más o menos racional.
Código: Seleccionar todo
#!/bin/bash
IFS=$'\x0A'$'\x0D'
if [ $# -ne 3 ]
then
echo "Uso: $0 origen extension destino"
exit
fi
ORIGEN=$1
EXT=$2
DEST=$3
count=0
find $ORIGEN -iname "*.$EXT" >/tmp/.total
total=`cat /tmp/.total|wc -l`
rel=`expr $total \/ 100`
lineas=`expr $(tput lines) - 6`
for i in `cat /tmp/.total`; do
if [ -f $DEST/`basename $i` ] ; then
cp $i $DEST/`basename $i .pdf`_copia_$(date|awk '{print $4}'|sed 's/://g').pdf
echo "copiado $i">> registro.log
count=`expr $count + 1`
else
cp $i $DEST
echo "copiado $i">> registro.log
count=`expr $count + 1`
fi
porc=`expr $count \/ $rel`
echo $porc |dialog --gauge "`tail -n $lineas registro.log`" `tput lines` `tput cols`
done
exit

- niky45
- Forista Ancestral
- Mensajes: 9187
- Registrado: Jue Abr 12, 2007 7:00 am
- Ubicación: tras la pantalla (...)
- Contactar:
Re: Comando cp, copiar sin sobreescribir -solucionado-
@ neurus: creo que quedaria bastante mas limpio con bc. si bien, te voy a admitir que meterle los porcentajes a dialog no es tarea facil. pero lo de calcularlo.... 
por cierto:
se que lo tuyo es falta de ganas de leer el man, pero... esque esa llamada a awk ahi queda rara. 

por cierto:
Código: Seleccionar todo
date +%H:%M:%S

#446716
>>"Linux: the operating system with a CLUE... Command Line User Environment".
(seen in a posting in comp.software.testing)
[ DNFD ] - [ F4A ] - [ dotfiles ]
>>"Linux: the operating system with a CLUE... Command Line User Environment".
(seen in a posting in comp.software.testing)
[ DNFD ] - [ F4A ] - [ dotfiles ]
Re: Comando cp, copiar sin sobreescribir -solucionado-
¡Eso era! yo lo recordaba vagamente, pero me estaba olvidando de agregarle el signo +.
De todos modos, lo que yo quería era sin los dos puntos, porque puede dar problemas con el nombre del archivo.
Es decir:
En cuanto al uso de bc, se me ocurrió pero no es realmente mucho más limpio el resultado. Sólo algo más fácil de entender. Lo hice con Bash "puro" porque me encapriché en que tenía que sacar los porcentajes inversos con Bash.
Lo de date + awk + sed sí, admito que era ridículo. Pero no recordaba el comando, y a veces uno siente que si lee el man, ha sido derrotado por la línea de comandos.
El mismo script, sin awk y sed, con bc, quedaría así. Como ves, no es mucho más limpio que el anterior. Sólo se elimina la variable $rel, que era la que establecía la relación porcentual inversa con respecto al total.
Editado -- Dom Ago 05, 2012 12:36 am --
Señor Cacumen: hay cosas que no se hacen. Porque estan mal vistas. Porque son desleales.
Por ejemplo: copiar el conocimiento aportado por un usuario de un sitio, para publicarlo sin citar la fuente en otro sitio. Hasta con los mismos errores del sitio original: en mi script, esta línea funciona sólo con un tipo de fichero:
Lo correcto sería:
Ahora vaya a esdebian y corrija mi script. Y no vaya a mencionar este sitio, a ver si allí lo reprenden...
De todos modos, lo que yo quería era sin los dos puntos, porque puede dar problemas con el nombre del archivo.
Es decir:
Código: Seleccionar todo
date +%H%M%S
Lo de date + awk + sed sí, admito que era ridículo. Pero no recordaba el comando, y a veces uno siente que si lee el man, ha sido derrotado por la línea de comandos.
El mismo script, sin awk y sed, con bc, quedaría así. Como ves, no es mucho más limpio que el anterior. Sólo se elimina la variable $rel, que era la que establecía la relación porcentual inversa con respecto al total.
Código: Seleccionar todo
#!/bin/bash
IFS=$'\x0A'$'\x0D'
if [ $# -ne 3 ]
then
echo "Uso: $0 origen extension destino"
exit
fi
ORIGEN=$1
EXT=$2
DEST=$3
count=0
find $ORIGEN -iname "*.$EXT" >/tmp/.total
total=`cat /tmp/.total|wc -l`
lineas=`expr $(tput lines) - 6`
for i in `cat /tmp/.total`; do
if [ -f $DEST/`basename $i` ] ; then
cp $i $DEST/`basename $i .pdf`_copia_$(date +%H%M%S).pdf
echo "copiado $i">> registro.log
count=`expr $count + 1`
else
cp $i $DEST
echo "copiado $i">> registro.log
count=`expr $count + 1`
fi
porc=`echo $count*100/$total|bc`
if [ -x /usr/bin/dialog ]; then
echo $porc |dialog --gauge "`tail -n $lineas registro.log`" `tput lines` `tput cols`;
else tail -n $lineas registro.log;
fi
done
exit
Señor Cacumen: hay cosas que no se hacen. Porque estan mal vistas. Porque son desleales.
Por ejemplo: copiar el conocimiento aportado por un usuario de un sitio, para publicarlo sin citar la fuente en otro sitio. Hasta con los mismos errores del sitio original: en mi script, esta línea funciona sólo con un tipo de fichero:
Código: Seleccionar todo
cp $i $DEST/`basename $i .pdf`_copia_$(date|awk '{print $4}'|sed 's/://g').pdf
Código: Seleccionar todo
cp $i $DEST/`basename $i $EXT`_copia_$(date|awk '{print $4}'|sed 's/://g')$EXT
-
- Forista Nuevo
- Mensajes: 1
- Registrado: Sab Jul 23, 2022 6:17 pm
Re: Comando cp, copiar sin sobreescribir -solucionado-
eh encontrado este switch de "cp" y funciona:
switch de cp:
-n, --no-clobber
do not overwrite an existing file (overrides a previous -i option)
cp -n myoldfile.txt mycopiedfile.txt
cp --no-clobber myoldfile.txt mycopiedfile.txt
fuente:
https://stackoverflow.com/questions/939 ... -overwrite
switch de cp:
-n, --no-clobber
do not overwrite an existing file (overrides a previous -i option)
cp -n myoldfile.txt mycopiedfile.txt
cp --no-clobber myoldfile.txt mycopiedfile.txt
fuente:
https://stackoverflow.com/questions/939 ... -overwrite
-
- Temas similares
- Respuestas
- Vistas
- Último mensaje