Test Foro de elhacker.net SMF 2.1

Programación => Scripting => Mensaje iniciado por: moikano→@ en 22 Febrero 2012, 15:35 PM

Título: [Bash] Recortar nombre de archivos de una salida del comando ls (Solucionado)
Publicado por: moikano→@ en 22 Febrero 2012, 15:35 PM
Hola.

Estoy intentando guardar los nombres de los archivos de una carpeta, haciendo un $ls <ruta carpeta>, en variables para luego utilizarlos.

Los nombres de los archivos tienen que ser sin extensión.

He estado probando pero no me aclaro, copie un código y fui modificando-lo hasta conseguir algo parecido a lo que pretendía tener, pero no lo consigo del todo.

El trozo de código es este:

#!/bin/bash
ruta=$(ls /home/moikano/Escritorio/ejerciciscript/videos/)
base="${ruta%%.*}"
ruta="${ruta##.*}"
ruta="${ruta%.*}"
base2="${ruta##.*}"
echo $base $base2


La salida del código es:
capitul2 capitul2.avi capitul

La salida que yo quisiera tener:
Citarcapitul2 capitul

Esto es lo máximo que he podido sacar, supongo que al final valdrá únicamente si hay 2 archivos, es decir, si la carpeta contiene mas de 2 archivos el script ( cuando este acabado y funcionando) no funcionará como debe ya que solo cojera 2 nombres de archivos.

Por si acaso os pongo la salida del comando:
$ls /home/moikano/Escritorio/ejerciciscript/videos/
Es:
capitul2.avi capitul.avi


Y si alguien pudiera remitirme a un manual o tutorial donde explicarán como se usan los parámetros ${variable%%.*} para modificar cadenas se lo agradecería.
Título: Re: [Bash script] Recortar nombre de archivos de una salida del comando ls
Publicado por: moikano→@ en 24 Febrero 2012, 19:29 PM
Bueno, al final lo solucioné por mi cuenta.

La solución era esta.


ruta=/root/Desktop/videos
ruta2=$(ls $ruta/*.avi)
for nombres in $ruta2
do
nombres="${nombres##*/}"
nombres="${nombres%%.*}"
echo $nombres
done


El resultado es:

capitul2
capitul





No se si me expliqué mal o que no he dado tiempo a responder, pero bueno, esta es la solución por si a alguien le sirve.
Título: Re: [Bash script] Recortar nombre de archivos de una salida del comando ls
Publicado por: leogtz en 24 Febrero 2012, 22:33 PM
También pudiste haberlo hecho así:

Código (bash) [Seleccionar]
ls -1 *.avi | while read file; do
echo -e "${file%%.*}";
done

Título: Re: [Bash script] Recortar nombre de archivos de una salida del comando ls
Publicado por: moikano→@ en 25 Febrero 2012, 11:17 AM
Gracias por contestar

Citarwhile read file; do

El read file es una función del while o se puede aplicar a mas estructuras?
Título: Re: [Bash script] Recortar nombre de archivos de una salida del comando ls
Publicado por: leogtz en 25 Febrero 2012, 18:55 PM
El read solo y el read con un while es solo como me ha tocado verlo, creo que son las únicas.

Aunque también puedes utilizar un comando después de un if.

if comando-salilda; then
....
fi


No sé si funcione.
Título: Re: [Bash script] Recortar nombre de archivos de una salida del comando ls
Publicado por: moikano→@ en 25 Febrero 2012, 19:27 PM
Ok gracias