Re: LS
On Tue, Mar 18, 2014 at 06:48:54PM -0430, Edward Villarroel (EDD) wrote:
> buenas tardes
>
>
> alguna ves en mi vida me parecio haber leido sobre formas de buscar
> archivos con ls
>
> ahora bien explicare con un ejemplo para ver si alguien me puede ayudar
>
> tengo una carpeta con muchos archivos .log cuyo formato de nombre es algo como:
>
> edward_yyyy_mm_dd
> edward_2014_01_26
> edward_2014_01_27
> edward_2014_01_28
> edward_2014_01_29
> ...........
> edward_2014_02_26
> edward_2014_02_27
> edward_2014_04_28
> edward_2014_05_29
> .......
>
> y quiero la lista de todos los archivos de cada ciertos meses
> tengo la forma poco practica de hacerlos asi
>
> ls -lr edward_2014_01* edward_2014_02* edward_2014_03*
>
> cuando quiero ver los archivos generados esos meses
> pero se que hay una forma de escribir menos lo digo por a en ocaciones
> no son 3 meses sino años
>
> si alguien me puede ayudar
>
>
>
>
> Edward Villarroel: @Agentedd
No es 'ls' lo que hace el trabajo, sino bash. Bash y otros shells
tienen un mecanismo denominado "globbing", que te permite usar
patrones parecidos a las expresiones regulares, con los cuales puedes
hacer cosas como:
$ ls -lr edward_2014_0[123]*
$ ls -lr edward_2014_0@(1|2|3)*
...
La primera forma es un glob normal. El [...] representa UN solo
caracter, cualquiera de los 3 enumerados. La segunda forma requiere
de 'extglob' (habilitado con: shopt -s extglob), para usar patrones
más avanzados.
Los elementos que puedes utilizar para formar tus patrones son:
- ? el cual hace 'match' de un solo caracter, es como el '.' en
regex
- * el cual hace 'match' de cero o más caracteres, de cualquier
tipo (comodín)
- [abc] el cual hace 'match' a un solo caracter, si el caracter está
en el conjunto expresado ('a', 'b', o 'c')
- [a-z] el cual hace 'match' al rango de caracteres que van desde la
'a' hasta la 'z', según la configuración que tengas de 'locale'.
Por ejemplo, archivos de los años 2012, 2013, y 2014:
$ ls -lr edward_201[234]_*
Para selecciones más complejas, requieres de extglob. Por ejemplo,
los archivos de los años de 1995 a 1997 y de 2003 a 2005:
$ shopt -s extglob
$ ls -lr edward_@(199[567]|200[345])_*
Con 'extglob' en bash puedes usar:
- @(a|b|c) alternativas
- ?(abc) opcional,
y otros más, pero te recomiendo que leas el manual de bash para más
detalle.
--
Eduardo Alan Bustamante López
Reply to:
- References:
- LS
- From: "Edward Villarroel (EDD)" <edward.villarroel@gmail.com>