Procurando um padrão em nomes de arquivos com número

3

Eu tenho um grande número de arquivos em uma pasta, cada um com a data como o nome do arquivo.
Por exemplo

20130101
20130102
20130103
.
.
.
20130131

similarmente para outros meses 20130201 a 20130230, o padrão é [Ano] [Mês] [Dia]. Eu preciso fazer um arquivo tar dos primeiros quinze arquivos de JAN a APRIL (ex. 2013[01-04][01-15] ), pois o intervalo de numeração de dois dígitos não é permitido em grep . Como devo pesquisar esse padrão?

    
por Aditya Cherla 13.12.2013 / 11:36

4 respostas

5

com zsh :

tar zcf ~/file.tar.gz 20130<1-4><1-15>

Se você tiver que usar bash :

shopt -s extglob
tar zcf ~/file.tar.gz 20130[1-4]@(0?|1[0-5])
    
por 13.12.2013 / 12:44
2

O bit grep é.

grep -zE "^20130[1-4](0[1-9]|1[0-5])$"
    
por 13.12.2013 / 12:12
2

Use find para encontrar os nomes dos arquivos:

find . -maxdepth 1 -name "20130[1-4]0?" -o -name "20130[1-4]1[0-5]" 

verifique se esse é o conjunto correto e use a saída como entrada para cpio :

find . -maxdepth 1 -name "20130[1-4]0?" -o -name "20130[1-4]1[0-5]" | cpio --create --format=ustar -O file.tar

@richard apontou que isso poderia passar por subdiretórios (se um subdiretório corresponder ao padrão) (e esse shell expandisse o padrão, corrigido).

A expansão na linha de comando executa o risco da linha de comando tornando-se muito longa, o que pode acontecer se você tiver um arquivo a cada poucos segundos para cada dia ( 20130101-00005 , 20130101-00007 . em cpio não tem problema.

    
por 13.12.2013 / 11:56
0

Você pode tar czvf file.tar.gz $(ls | grep "201301\|201302\|201303\|201304" | grep -v "16\|17\|18\|19\|20\|21\|22\|23\|24\|25\|26\|27\|28\|29\|30\|31") do diretório base.

    
por 13.12.2013 / 11:58