Eu tenho mais de 2000 arquivos em uma pasta, mas há poucos arquivos ausentes na pasta.
O nome dos arquivos é como
GLDAS_NOAH025SUBP_3H.A2003 001,0000 .001.2015210044609.pss.grb GLDAS_NOAH025SUBP_3H.A2003 001,0600 .001.2015210044609.pss.grb GLDAS_NOAH025SUBP_3H.A2003 001,1200 .001.2015210044609.pss.grb GLDAS_NOAH025SUBP_3H.A2003 001,1800 .001.2015210044609.pss.grb GLDAS_NOAH025SUBP_3H.A2003 002,0000 .001.2015210044609.pss.grb GLDAS_NOAH025SUBP_3H.A2003 002,0600 .001.2015210044609.pss.grb GLDAS_NOAH025SUBP_3H.A2003 002,1200 .001.2015210044609.pss.grb GLDAS_NOAH025SUBP_3H.A2003 002,1800 .001.2015210044609.pss.grb GLDAS_NOAH025SUBP_3H.A2003 003,0000 .001.2015210044609.pss.grb GLDAS_NOAH025SUBP_3H.A2003003.0600 .001.2015210044609.pss.grb GLDAS_NOAH025SUBP_3H.A2003 003.1200 .001.2015210044609.pss.grb GLDAS_NOAH025SUBP_3H.A2003 003.1800 .001.2015210044609.pss.grb
001
indica dia, enquanto 0000
é a hora.
Como descobrir qual arquivo está faltando na pasta? Eu tenho poucas respostas no google, mas não consegui descobrir como implementá-las.
fonte
Respostas:
Com
zsh
oubash4
, você pode usar a expansão de chaves para isso:Observe os colchetes:
{001..006}
meios expandir para001
,002
...006
{0000,0600,1200,1800}
a todos os itens acima0000
, adicione0600
,1200
e1800
.>/dev/null
é evitar a saída padrão dels
-> queremos apenas erro padrãoAgora, se um arquivo não estiver presente,
ls
será exibido um erro para isso:Com
ksh93
, substitua{001..006}
por{1..6%.3d}
.fonte
{001..365}
, para mim ele funciona{0000..1800..600}
formulário..{00,06,12,18}00.
.Uma variação na solução @chaos (bash 4.0 ou superior ou zsh 4.3.11 e superior):
ou
imprimir apenas o dia + hora que falta
fonte
Embora a resposta do caos seja boa para ser usada em shells interativos, essa pode ser usada como um script POSIX, por exemplo, se você precisar fazer isso periodicamente e / ou em outros computadores.
(
seq
ou a expansão entre chaves não é especificada pelo POSIX.)fonte
Crie os nomes dos arquivos em um loop e teste a inexistência de um arquivo:
Nota: Não garanto que este exemplo esteja livre de erros. É um exemplo, não um script de trabalho conhecido.
Portabilidade: necessidades
ksh
,bash
ouzsh
e um sistema com o GNUseq
comando disponíveis.fonte