Ayuda de expertos en LINUX
Realmente hay muchos problemas, incluidos problemas de sintaxis y problemas de diseño
No hay "hecho" al final de esta función
panduan2() p>
{
comman_counter=0
para i en `0 $c`
si [ -f $i ]
entonces
mv $i "$i nuevo"
comman_counter=`expr $comman_counter 1`
return $comman_counter
else
p>
return 2
fi #Agregar un hecho a la siguiente columna
}
mv $i " $i new" #El nombre se cambiará a Un nombre de archivo con dos espacios y un signo más
Otros no usan " " para proteger variables, [ -f $i ], por ejemplo
nc10@your-5554c55be4 ~
$ i="archivo con errores"
nc10@your-5554c55be4 ~
$ ls archivo con errores\
archivo con errores
p>
nc10@your-5554c55be4 ~
$ [ -f $i ] amp echo sí
bash: [: buggy: operador binario esperado
nc10@your-5554c55be4 ~
$ [ -f "$i" ] amp;amp; echo sí
sí
nc10@your -5554c55be4 ~
$
Mientras haya espacios en el nombre del archivo, se producirá un error para los scripts que. no son demasiado grandes ni códigos que se repiten con frecuencia,
No sé cómo hacerlo. Hay demasiadas funciones escritas, déjame escribir una para ver,
. #! /bin/sh
# usando sh tradicional, no bash, para uso portátil
="Uso: `basename $0` ruta"
ruta= $1
count=0
si [ $# -eq 0 ] || [ ! - d "$path" ]
entonces
echo "$uso" gt;amp; 2
salir 1
fi
p>cd "$ruta" amp; están en `pwd`"
echo ""
files=`ls -l | grep '^ -' | wc -l`
directorio=` ls -l | grep '^d' | wc -l`
echo "Tenemos archivos $files y el directorio $directory aquí."
echo "Simplemente cambiamos el nombre del archivo. "
porque yo en *
hago
if [ -f "$i" ] ; entonces
nombre="$i.NEW"
mv -f "$i" "$nombre"
count=`expr $count 1`
else
continuar
fi
echo "$i se renombra a $nombre"
hecho
echo "Todo listo."
echo "se cambia el nombre de $count."
salida 0
Prueba
nc10@your-5554c55be4 ~
$ ls tmp
marksix.awk* hoja02.pdf hoja03.txt hoja05.pdf testdir2/ p>
hoja01.pdf hoja02.txt hoja04.pdf hoja05.txt
hoja01.txt hoja03.pdf hoja04.txt testdir/
nc10@your-5554c55be4 ~ p>
$ cat test_script
#! /bin/sh
# usando sh tradicional, no bash, para portátil
usage="Uso: `basename $0` ruta"
ruta=$1
count=0
if [ $# -eq 0 ] || [ ! -d "$ruta " ]
luego
echo "$usage" gt;amp; 2
salida 1
fi
cd "$path" amp; echo "Estamos en `pwd`"
echo ""
files=`ls -l | -l`
directorio=`ls -l | grep '^d' | wc -l`
echo "Tenemos archivos $files y el directorio $directory." p>
echo "Simplemente cambiamos el nombre del archivo."
for i in *
do
if [ -f "$i" ] ; entonces
nombre="$i.NEW"
mv -f "$i" "$nombre"
count=`expr $count 1`
más
continuar
fi
echo "$i pasa a llamarse $nombre"
hecho
echo "Todo listo".
echo "Se cambia el nombre de $count."
salida 0
nc10@your-5554c55be4 ~
$ chmod x test_script
nc10@your -5554c55be4 ~
$ ./test_script
Uso: ruta test_script
nc10@your-5554c55be4 ~
$ ./test_script llll
Uso: ruta test_script
nc10@your-5554c55be4 ~
$ ./test_script tmp
Estamos en /home/nc10 /tmp
Tenemos 11 archivos y 2 directorios aquí.
Simplemente cambiamos el nombre del archivo.
marksix.awk pasa a llamarse marksix.awk.NEW
hoja01.pdf pasa a llamarse hoja01.pdf.NEW
hoja01.txt pasa a llamarse hoja01.txt.NEW
hoja02.pdf pasa a llamarse hoja02. pdf.NEW
hoja02.txt pasa a llamarse hoja02.txt.NEW
hoja03.pdf pasa a llamarse hoja03.pdf.NEW
hoja03.txt es se cambia el nombre a hoja03.txt.NEW
se cambia el nombre de hoja04.pdf a hoja04.pdf.NEW
se cambia el nombre de hoja04.txt a hoja04.txt.NEW
Se cambia el nombre de hoja05.pdf a hoja05.pdf.NEW
se cambia el nombre de hoja05.txt a hoja05.txt.NEW
Todo listo.
Se cambia el nombre de 11.
nc10@your-5554c55be4 ~
$ ls tmp
marksix.awk.NUEVA* hoja02.pdf.NUEVA hoja03.txt.NUEVA hoja05.pdf. NUEVO testdir2/
hoja01.pdf.NUEVA hoja02.txt.NUEVA hoja04.pdf.NUEVA hoja05.txt.NUEVA
hoja01.txt.NUEVA hoja03.pdf.NUEVA hoja04.txt .NUEVO testdir/
nc10@y
our-5554c55be4 ~
$
El código es confuso, jaja, puedes usar sh -x script_name para ver cómo funciona