Ajuda: Listando um intervalo no bash

Next Topic
 
classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

Ajuda: Listando um intervalo no bash

Flávio Barros
Bom dia.
Preciso listar alguns diretórios dentro de um intervalo. No caso abaixo,
seria do dia 25 ao dia 30 do mês 09.

2019-09-25
2019-09-26
2019-09-27
2019-09-28
2019-09-29
2019-09-30

Ao excutar ls 2019-09-[25-30]* , todos os diretórios são listados. O que
está errado ?





--
Desde já agradeço,
+++
Flávio Barros
Manaus - Amazonas - Brasil

Linux Registered User# 278223
--
Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece

Lista de discussão Ubuntu Brasil
Histórico, descadastramento e outras opções:
https://lists.ubuntu.com/mailman/listinfo/ubuntu-br
Reply | Threaded
Open this post in threaded view
|

Re: Ajuda: Listando um intervalo no bash

C de-Avillez-2
On Mon, Oct 7, 2019 at 11:51 AM Flávio Barros <[hidden email]> wrote:

>
> Bom dia.
> Preciso listar alguns diretórios dentro de um intervalo. No caso abaixo,
> seria do dia 25 ao dia 30 do mês 09.
>
> 2019-09-25
> 2019-09-26
> 2019-09-27
> 2019-09-28
> 2019-09-29
> 2019-09-30
>
> Ao excutar ls 2019-09-[25-30]* , todos os diretórios são listados. O que
> está errado ?

Bem.

Em primeiro lugar, *não* é 'ls' que trabalha o asterisco no comando
'ls 2019-09-[25-30]*', mas *bash*. Por exemplo:

cerdea@piatam:~/tmp$ ls
2019-01-01/  2019-01-02/  2019-01-03/  2019-01-04/  2019-01-05/
2019-01-06/  2019-01-07/  2019-01-08/  2019-01-09/  2019-01-10/
# o default para o shell é "globbing", procurar por todas strings que
resolvem o padrão fornecido
# apenas para clareza, aqui eu guaranto que globbing está activo
cerdea@piatam:~/tmp$ set +f
cerdea@piatam:~/tmp$ ls 2019-01-[01-06]*
2019-01-01:
2019-01-02:
2019-01-03:
2019-01-04:
2019-01-05:
2019-01-06:
2019-01-07:
2019-01-08:
2019-01-09:
# agora, garantimos que o shell não irá expandir patterns (noglob)
cerdea@piatam:~/tmp$ set -f
cerdea@piatam:~/tmp$ ls 2019-01-[01-06]*
ls: cannot access '2019-01-[01-06]*': No such file or directory
2 cerdea@piatam:~/tmp$

O segundo ponto é que "[...]", para o bash, significa: nesta
*posição*, tente encontrar strings que resolvam
para cada *um* dos caracteres entre "[" e "]". O ponto-chave, aqui, é
UM caracter.

Então, o padrão "a[0134]b", por exemplo, pode ser resolvido pelas strings:
a0b
a1b
a3b
a4b

mas *não* por "a2b"! Ou por "a1bb", etc.

Se o padrão fornecido for (como o seu) "[25-30]"... isto corresponde
ao padrão expandido "[20]". O "-",
neste caso, corresponde à sequencia de caracteres, *em ordem
(ascendente)*, entre o caracter imediatamente antes do
"-" e o caracter imediatamente após o "-". Assim, "[0-5]" é
equivalente à "[012345]", "[a-ce-g]" é
"[abcefg]", e assim por diante. "5-3" é a sequência de caracteres
entre "5" e "3" -- o conjunto vazio...

A "ordem" imposta em caracteres depende do local ("locale", em Inglês).

Não sei se existe um manual de bash em Português. Para o em Inglês,
use 'man bash'. Leitura, como a
maioria dos manuais de *IX (UNIX, Linux, AIX, etc) é... difícil...

Cheers,
--
..hggdh..

--
Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece

Lista de discussão Ubuntu Brasil
Histórico, descadastramento e outras opções:
https://lists.ubuntu.com/mailman/listinfo/ubuntu-br
Reply | Threaded
Open this post in threaded view
|

Re: Ajuda: Listando um intervalo no bash

Marcos Alano
In reply to this post by Flávio Barros
Boa tarde,

Tu pode testar o seguinte:
$ ls 2019-09-{25..30}


On Mon, Oct 7, 2019 at 8:51 AM Flávio Barros <[hidden email]> wrote:

> Bom dia.
> Preciso listar alguns diretórios dentro de um intervalo. No caso abaixo,
> seria do dia 25 ao dia 30 do mês 09.
>
> 2019-09-25
> 2019-09-26
> 2019-09-27
> 2019-09-28
> 2019-09-29
> 2019-09-30
>
> Ao excutar ls 2019-09-[25-30]* , todos os diretórios são listados. O que
> está errado ?
>
>
>
>
>
> --
> Desde já agradeço,
> +++
> Flávio Barros
> Manaus - Amazonas - Brasil
>
> Linux Registered User# 278223
> --
> Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece
>
> Lista de discussão Ubuntu Brasil
> Histórico, descadastramento e outras opções:
> https://lists.ubuntu.com/mailman/listinfo/ubuntu-br
>


--
Marcos H. Alano
Linux System Administrator
[hidden email]
--
Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece

Lista de discussão Ubuntu Brasil
Histórico, descadastramento e outras opções:
https://lists.ubuntu.com/mailman/listinfo/ubuntu-br
Reply | Threaded
Open this post in threaded view
|

Re: Ajuda: Listando um intervalo no bash

C de-Avillez-2
On Thu, Oct 10, 2019 at 2:32 PM Marcos Alano <[hidden email]> wrote:
>
> Boa tarde,
>
> Tu pode testar o seguinte:
> $ ls 2019-09-{25..30}

Marcos, boa! Tinha esquecido de mostrar como...

A forma completa é <prefixo>{a..b..c}<sufixo>, onde <prefixo e
<sufixo> são strings quaisquer (que não usam "{}"); para o conteúdo de
{...}:
a -- valor inicial (um caracter ou um número inteiro)
b -- valor final (um caracter ou um número inteiro)
c -- se fornecido, é o incremento desejado; se não fornecido, é o
incremento unitário.

Por exemplo:

cerdea@piatam:~/tmp$ ls
2019-01-01/  2019-01-02/  2019-01-03/  2019-01-04/  2019-01-05/
2019-01-06/  2019-01-07/  2019-01-08/  2019-01-09/  2019-01-10/
cerdea@piatam:~/tmp$ echo 2019-01-0{1..5..1}
2019-01-01 2019-01-02 2019-01-03 2019-01-04 2019-01-05
cerdea@piatam:~/tmp$ ls 2019-01-0{2..5}
2019-01-02:
2019-01-03:
2019-01-04:
2019-01-05:
cerdea@piatam:~/tmp$ echo 2019-01-0{a..e..1}
2019-01-0a 2019-01-0b 2019-01-0c 2019-01-0d 2019-01-0e
ls: cannot access '2019-01-0a': No such file or directory
ls: cannot access '2019-01-0b': No such file or directory
ls: cannot access '2019-01-0c': No such file or directory
ls: cannot access '2019-01-0d': No such file or directory
ls: cannot access '2019-01-0e': No such file or directory
cerdea@piatam:~/tmp$ echo 2019-01-0{a..e..2}
2019-01-0a 2019-01-0c 2019-01-0e
cerdea@piatam:~/tmp$

Cheers,
--
..hggdh..

--
Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece

Lista de discussão Ubuntu Brasil
Histórico, descadastramento e outras opções:
https://lists.ubuntu.com/mailman/listinfo/ubuntu-br
Reply | Threaded
Open this post in threaded view
|

Re: Ajuda: Listando um intervalo no bash

Flávio Barros
Boa tarde.
Muito obrigado a todos.
Vou testar cada sugestão e depois envio a uma solução.


Desde já agradeço.
Flávio Barros

Em qui, 10 de out de 2019 11:33, C de-Avillez <[hidden email]> escreveu:

> On Thu, Oct 10, 2019 at 2:32 PM Marcos Alano <[hidden email]>
> wrote:
> >
> > Boa tarde,
> >
> > Tu pode testar o seguinte:
> > $ ls 2019-09-{25..30}
>
> Marcos, boa! Tinha esquecido de mostrar como...
>
> A forma completa é <prefixo>{a..b..c}<sufixo>, onde <prefixo e
> <sufixo> são strings quaisquer (que não usam "{}"); para o conteúdo de
> {...}:
> a -- valor inicial (um caracter ou um número inteiro)
> b -- valor final (um caracter ou um número inteiro)
> c -- se fornecido, é o incremento desejado; se não fornecido, é o
> incremento unitário.
>
> Por exemplo:
>
> cerdea@piatam:~/tmp$ ls
> 2019-01-01/  2019-01-02/  2019-01-03/  2019-01-04/  2019-01-05/
> 2019-01-06/  2019-01-07/  2019-01-08/  2019-01-09/  2019-01-10/
> cerdea@piatam:~/tmp$ echo 2019-01-0{1..5..1}
> 2019-01-01 2019-01-02 2019-01-03 2019-01-04 2019-01-05
> cerdea@piatam:~/tmp$ ls 2019-01-0{2..5}
> 2019-01-02:
> 2019-01-03:
> 2019-01-04:
> 2019-01-05:
> cerdea@piatam:~/tmp$ echo 2019-01-0{a..e..1}
> 2019-01-0a 2019-01-0b 2019-01-0c 2019-01-0d 2019-01-0e
> ls: cannot access '2019-01-0a': No such file or directory
> ls: cannot access '2019-01-0b': No such file or directory
> ls: cannot access '2019-01-0c': No such file or directory
> ls: cannot access '2019-01-0d': No such file or directory
> ls: cannot access '2019-01-0e': No such file or directory
> cerdea@piatam:~/tmp$ echo 2019-01-0{a..e..2}
> 2019-01-0a 2019-01-0c 2019-01-0e
> cerdea@piatam:~/tmp$
>
> Cheers,
> --
> ..hggdh..
>
> --
> Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece
>
> Lista de discussão Ubuntu Brasil
> Histórico, descadastramento e outras opções:
> https://lists.ubuntu.com/mailman/listinfo/ubuntu-br
>
--
Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece

Lista de discussão Ubuntu Brasil
Histórico, descadastramento e outras opções:
https://lists.ubuntu.com/mailman/listinfo/ubuntu-br
Reply | Threaded
Open this post in threaded view
|

Re: Ajuda: Listando um intervalo no bash

Flávio Barros
In reply to this post by Marcos Alano
Bom dia.
Funcionou.

Em qui, 10 de out de 2019 às 10:32, Marcos Alano <[hidden email]>
escreveu:

> Boa tarde,
>
> Tu pode testar o seguinte:
> $ ls 2019-09-{25..30}
>
>
> On Mon, Oct 7, 2019 at 8:51 AM Flávio Barros <[hidden email]>
> wrote:
>
> > Bom dia.
> > Preciso listar alguns diretórios dentro de um intervalo. No caso abaixo,
> > seria do dia 25 ao dia 30 do mês 09.
> >
> > 2019-09-25
> > 2019-09-26
> > 2019-09-27
> > 2019-09-28
> > 2019-09-29
> > 2019-09-30
> >
> > Ao excutar ls 2019-09-[25-30]* , todos os diretórios são listados. O que
> > está errado ?
> >
> >
> >
> >
> >
> > --
> > Desde já agradeço,
> > +++
> > Flávio Barros
> > Manaus - Amazonas - Brasil
> >
> > Linux Registered User# 278223
> > --
> > Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece
> >
> > Lista de discussão Ubuntu Brasil
> > Histórico, descadastramento e outras opções:
> > https://lists.ubuntu.com/mailman/listinfo/ubuntu-br
> >
>
>
> --
> Marcos H. Alano
> Linux System Administrator
> [hidden email]
> --
> Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece
>
> Lista de discussão Ubuntu Brasil
> Histórico, descadastramento e outras opções:
> https://lists.ubuntu.com/mailman/listinfo/ubuntu-br
>


--
Desde já agradeço,
+++
Flávio Barros
Manaus - Amazonas - Brasil

Linux Registered User# 278223
--
Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece

Lista de discussão Ubuntu Brasil
Histórico, descadastramento e outras opções:
https://lists.ubuntu.com/mailman/listinfo/ubuntu-br
Reply | Threaded
Open this post in threaded view
|

Re: Ajuda: Listando um intervalo no bash

Flávio Barros
Bom dia.
Só para ficar registrado na lista.
Consegui também assim:

find backupext/ -type d -regextype posix-extended -regex
'backupext\/2019-09-(2[5-6]|30)' -exec cp -R {} /tmp \;


Muito obrigado a todos.

Em sex, 11 de out de 2019 às 06:23, Flávio Barros <[hidden email]>
escreveu:

> Bom dia.
> Funcionou.
>
> Em qui, 10 de out de 2019 às 10:32, Marcos Alano <[hidden email]>
> escreveu:
>
>> Boa tarde,
>>
>> Tu pode testar o seguinte:
>> $ ls 2019-09-{25..30}
>>
>>
>> On Mon, Oct 7, 2019 at 8:51 AM Flávio Barros <[hidden email]>
>> wrote:
>>
>> > Bom dia.
>> > Preciso listar alguns diretórios dentro de um intervalo. No caso abaixo,
>> > seria do dia 25 ao dia 30 do mês 09.
>> >
>> > 2019-09-25
>> > 2019-09-26
>> > 2019-09-27
>> > 2019-09-28
>> > 2019-09-29
>> > 2019-09-30
>> >
>> > Ao excutar ls 2019-09-[25-30]* , todos os diretórios são listados. O que
>> > está errado ?
>> >
>> >
>> >
>> >
>> >
>> > --
>> > Desde já agradeço,
>> > +++
>> > Flávio Barros
>> > Manaus - Amazonas - Brasil
>> >
>> > Linux Registered User# 278223
>> > --
>> > Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece
>> >
>> > Lista de discussão Ubuntu Brasil
>> > Histórico, descadastramento e outras opções:
>> > https://lists.ubuntu.com/mailman/listinfo/ubuntu-br
>> >
>>
>>
>> --
>> Marcos H. Alano
>> Linux System Administrator
>> [hidden email]
>> --
>> Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece
>>
>> Lista de discussão Ubuntu Brasil
>> Histórico, descadastramento e outras opções:
>> https://lists.ubuntu.com/mailman/listinfo/ubuntu-br
>>
>
>
> --
> Desde já agradeço,
> +++
> Flávio Barros
> Manaus - Amazonas - Brasil
>
> Linux Registered User# 278223
>


--
Desde já agradeço,
+++
Flávio Barros
Manaus - Amazonas - Brasil

Linux Registered User# 278223
--
Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece

Lista de discussão Ubuntu Brasil
Histórico, descadastramento e outras opções:
https://lists.ubuntu.com/mailman/listinfo/ubuntu-br