Se o arquivo mal-arquivado for nomeado corretamente, isso deve funcionar (basta colá-lo em um terminal no diretório pai):
nxtyear="";
tmrow="";
for year in $(seq 2012 -1 1996); do
for day in $(seq -f "%03g" 365 -1 1); do
[ -d $year/$tmrow ] &&
ln -s ../../$year/$day/$nxtyear.$tmrow.00.bin $nxtyear/$tmrow/;
tmrow=$day;
nxtyear=$year;
done;
done
Isso pressupõe que o primeiro arquivo de 1997 está em 1996/365/1997.001.00.bin
. Em outras palavras, ele é nomeado corretamente, mas colocado incorretamente. Se este não for o caso, me avise e modificarei minha resposta.
Explicação
O pequeno script acima irá percorrer todos os anos de 2012 a 1996 para trás e, da mesma forma, para todos os números de 365 a 001. Ao final do loop, ele salvará o dia atual como $tmrow
e o ano atual como% código%. A primeira vez que ele for executado, ele será indefinido e o script não fará nada (é por isso que estou verificando se o diretório existe com $nxtyear
).
Sempre que o script fizer um loop, ele vinculará um arquivo chamado [ -d $year/$tmrow ] &&
to $year/$day/$nxtyear.$tmrow.00.bin
. Assim, por exemplo, quando $nxtyear/$tmrow/
é $year
e 1996
é $day
, 365
será $nxtyear
e 1997
será $tmrow
. O script, portanto, será executado
ln -s 1996/365/1997.001.00.bin 1997/001/
Você pode verificar o que o script fará sem fazer alterações adicionando 001
à echo
line:
[ -d $year/$tmrow ] &&
echo ln -s $year/$day/$nxtyear.$tmrow.00.bin $nxtyear/$tmrow/;