El 2009-04-09 a las 00:50 +0200, Carlos E. R. escribió:
El 2009-04-08 a las 22:18 +0200, Camaleón escribió:
a) Si $ruta_m tiene un subdirectorio, me salta un error al terminar la ejecución, aunque el mensaje se envía:
*** Es un directorio "/home/hpc02/dead.letter" 1/39 . . . message not sent. ***
for file in $ruta_m*; do if test -f "$file" ; then echo "Hola, blah, blah..." | mailx -r $remitente -a $file -s $file $destinatario; sleep $pausa; fi done
Así sólo enviará los ficheros normales, también se saltará los enlaces simbólicos, devices, etc. man test:
-f FILE FILE exists and is a regular file
Gracias. Eso es. Funciona perfecto.
b) El "asunto" del correo contiene la ruta al archivo que se envía, pero queda muy cutre O:-)
¿Alguna forma sencilla de obtener sólo el nombre del archivo?
basename, de las coreutils:
FILENAME=`basename $file`
Por ejemplo:
TOTAL=0 for file in $ruta_m*; do if test -f "$file" ; then let "TOTAL = $TOTAL + 1" fi done
COUNT=0 for file in $ruta_m*; do if test -f "$file" ; then let "COUNT = $COUNT + 1" FILENAME=`basename $file` SUBJECT="Te envio el fichero $FILENAME, $COUNT de $TOTAL" echo "Hola, blah, blah..." | \ mailx -r $remitente -a $file -s "$SUBJECT" $destinatario; sleep $pausa; fi done
Una solución muy depurada. Gracias. ... Buscando información sobre "basename", he visto que también se podría utilizar un patrón, a modo de filtro, para obtener sólo el nombre del archivo: *** bash String Manipulations http://linuxgazette.net/issue18/bash.html (...) Given: foo=/tmp/my.dir/filename.tar.gz We can use these expressions: path = ${foo%/*} To get: /tmp/my.dir (like dirname) file = ${foo##*/} To get: filename.tar.gz (like basename) base = ${file%%.*} To get: filename ext = ${file#*.} To get: tar.gz Note that the last two depend on the assignment made in the second one. Here we notice two different "operators" being used inside the parameters (curly braces). Those are the # and the % operators. We also see them used as single characters and in pairs. This gives us four combinations for trimming patterns off the beginning or end of a string: ${variable%pattern} Trim the shortest match from the end ${variable##pattern} Trim the longest match from the beginning ${variable%%pattern} Trim the longest match from the end ${variable#pattern} Trim the shortest match from the beginning *** Lo cual, aplicado a la rutina, parece que también funciona: mailx -r $remitente -a $file -s ${file##*/} $destinatario; Saludos, -- Camaleón -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org