[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: ls y break



2012/5/19 Alfonso Egea Callejas <a.egeacallejas@gmail.com>:
> El 19/05/12, "Matías A. Bellone" <matiasbellone@gmail.com> escribió:
>> On 05/19/2012 01:06 PM, Alfonso Egea Callejas wrote:
>>> Hola a todos.
>>>
>>> Me interesaría que en un script se utilizase el "primer" elemento de
>>> una carpeta únicamente para llevar a cabo una acción. Es decir si:
>>>
>>> $ ls carpeta
>>> aa   bb   cc
>>>
>>> busco una orden que devuelva aa.
>>>
>>> Buscando con ls --help, man ls y google lo más parecido que he
>>> encontrado es romper un ciclo for con break:
>>>
>>> for i in `ls carpeta`; do
>>> echo $i
>>> break
>>> done
>>>
>>> pero me parece raro que no haya una opción de ls para listar
>>> únicamente el primer elemento... sabéis si la hay?
>>>
>>
>> no que yo sepa, pero podés encadenar comandos y para sacar los elementos
>> del tope de una lista, tenés head:
>>
>> $ ls carpeta | head -n1
>> aa
>
> Sí, acabo de encontrarlo también. Usando pipes entre ls y head o tail
> puedes obtener "todas" las combinaciones posibles. Ejemplo:
>
> $ ls carpeta | head -2    #muestra los dos primeros
> aa
> bb
>
> $ ls carpeta | tail -1      #muestra el último
> cc
>
> $ ls carpeta | head -2 | tail -1   #muestra el segundo
> bb
>
> Lástima no poder acceder a la "posición" deseada directamente con ls
> para que quedase más limpio :( pero bueno, todo tiene solución :D
Para sacar la línea N de un fichero, mejor usa sed, awk, o perl
Ejemplos:
ls | sed -n 'Np'
ls | awk 'NR == N'
ls | perl -ne 'print if ($. == N)'

Si la entrada tiene muchas líneas, mejor salirte en cuanto imprimes
:-) (usando q en sed, o exit en perl / awk)

Un saludo


Reply to: