Nesta linha:
echo $(awk '{ print $6 }' | awk 'BEGIN { FS = "-" }; { print $1 }')
O primeiro awk dentro da substituição do comando não tem nenhuma entrada especificada, então ele lê a partir do stdin, que está conectado ao seu terminal, o que significa que ele espera que você dê alguma entrada.
Para dar uma entrada da variável do shell, é provável que você queira inseri-la em:
echo "$var" | awk...
Fazer echo $(foo bar)
parece estranho, pois o echo apenas imprimirá a saída do comando foo bar
, o que aconteceria em qualquer caso se você executasse foo bar
sozinho. (Além da divisão de palavras, mas é provável que não fosse o que você estava procurando.)
Além disso, o loop for.
for i in "$LIST"; do
será executado apenas uma vez, com i
definido para o valor de LIST
. Como $LIST
é citado, ele não passa pela divisão de palavras e for
vê apenas um item na lista. No entanto, se você fizer isso sem aspas, como em for i in $LIST; do...
, verá que ele também se divide nos espaços. Você precisaria definir IFS
como uma nova linha para impedir isso.
Mesmo depois disso, há o possível problema que a saída de ls
pode ser um pouco complicada: o formato de hora pode mudar de acordo com a localidade (embora eu não tenha certeza se isso acontece com --full-time
), e pode mangle caracteres não imprimíveis em nomes de arquivos. Se você conhece sua localidade e se os nomes dos arquivos são "legais", pode funcionar.
Uma alternativa seria deixar o shell localizar os arquivos e usar algo como date --reference $file
(se você tiver isso), para obter a data:
for f in *.jpg ; do
d=$(date +"%Y-%m-%d" -r "$f")
echo "$d $f"
done
(GNU coreutils date
tem o --reference
flag. date -r
no OS X leva um tempo em vez de um arquivo.)