Preencher matriz com uma combinação sed / echo

1

Estou tentando renomear vários arquivos contendo datas. Eu quero dividir a data em ano, mês e dia e, em seguida, criar um novo nome de arquivo em uma árvore de diretório como ano / mês-ano / filename_yearmonthday.extension

Já consegui criar uma expressão sed para filtrar a data e gravá-la em três variáveis separadas. Gostaria agora de inserir os valores em uma matriz, onde [0] é ano, [1] é mês e [2] é dia. Eu tentei a seguinte declaração:

#!/bin/bash
for i in *
do 
myarray=( $(echo ${i} |  \
  sed -n 's/.*\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\).*/  /p' ) )
done

mas o roteiro reclama     Erro de sintaxe: "(" unexpected (expecting "done") na terceira linha que contém a expressão sed.

*** edit A posição da data continua mudando, então não posso simplesmente dividir por strings.

A partir de agora, eu nem tenho sucesso em algo assim:

#!/bin/bash
myarray=(1 2 3 4)
echo ${myarray[@]}

sempre me diz "Erro de sintaxe:" ("inesperado (esperando" feito ")" na linha que contém o array. *** endedit

Se eu fizer isso diretamente na linha de comando, está funcionando. Obrigado pela ajuda.

    
por bstabens 25.08.2016 / 12:35

1 resposta

0

Se fosse eu, eu iria carregar o array assim:

#!/bin/bash

string="file_20160825_namegoeson"

myarray[0]="${string:5:4}"
myarray[1]="${string:9:2}"
myarray[2]="${string:11:2}"

echo "${myarray[0]}"
echo "${myarray[1]}"
echo "${myarray[2]}"
    
por 26.08.2016 / 06:29

Tags