Expansão do nome de arquivo a partir de intervalos de datas

3

Considere as datas no formato ISO 8601 , ou seja, ‘YYYY-MM-DD’ , por ex. 2015-01-28 e digamos que temos uma pasta com arquivos do formulário:

AAAA_<date>_BBBB

Estou procurando um padrão global em zsh (ou Bash) que eu possa usar para especificar arquivos entre duas datas.

Por exemplo, digamos que eu queira copiar arquivos entre 2014-12-15 e 2015-02-03 . Existe uma maneira fácil de construir uma expressão glob para se referir a arquivos entre essas duas datas (incluindo eles)?

O seguinte pode ajudar (de ordem lexicográfica ):

An important exploitation of lexicographical ordering is expressed in the ISO 8601 date formatting scheme, which expresses a date as YYYY-MM-DD. This date ordering lends itself to straightforward computerized sorting of dates such that the sorting algorithm does not need to treat the numeric parts of the date string any differently from a string of non-numeric characters, and the dates will be sorted into chronological order.

    
por Amelio Vazquez-Reina 04.02.2015 / 02:13

1 resposta

3

É bom que você tenha marcado a pergunta com zsh , já que nesse shell você pode usar extensas qualificadores glob incluindo testes feitos em nomes de arquivos:

$ ls -1 AAAA*
AAAA_2012-10-03_BBBB
AAAA_2014-12-28_BBBB
AAAA_2015-01-03_BBBB
AAAA_2015-02-03_BBBB
AAAA_2015-10-03_BBBB

$ d1='2014-12-15'
$ d2='2015-02-03'
$ print -l *(e:'[[ "${${REPLY#*_}%_*}" > "$d1" && "${${REPLY#*_}%_*}" < "$d2" ]]':)
AAAA_2014-12-28_BBBB
AAAA_2015-01-03_BBBB

Observe que, para o formato de data especificado, você pode realizar uma comparação de string simples.

Assumi aqui que seus arquivos são nomeados AAAA_date_BBBB como na pergunta e extraíram a parte "date" com a expansão de parâmetro. Você provavelmente precisaria modificar esse código para obter "data" de maneira adequada para seu cenário real.

    
por 04.02.2015 / 05:13