Como outras pessoas disseram antes de mim: Não analise a saída de ls !
Por que não simplesmente:
stat --printf='%y\t%n\n' -- *
Se você quiser fazer algo com cada nome de arquivo e data e hora, read a saída de stat assim:
stat --printf='%y\t%nfor f in /source/dir/*; do
touch -c -r "${f}" "/dest/dir/${f##*/}"
done
' -- * | \
while IFS=$'\t' read -rd '' timestamp i; do
echo "filename: ${i}, timestamp: ${timestamp}"
done
Não é preciso gerar um novo processo stat para cada arquivo, o que você notará assim que gerar algumas centenas de processos para algumas centenas de arquivos.
Para correspondências mais complicadas do que simples globbing, eu recomendo find com uma opção -printf adequada.
Edit: De acordo com os comentários para esta resposta, descobri que OP realmente quer copiar os carimbos de hora de modificação de arquivos de um diretório para outro. Isto é o que eu sugiro:
stat --printf='%y\t%n\n' -- *
Isso leva todas as entradas de /source/dir como referências de carimbo de hora ( -r ) para entradas do mesmo nome de arquivo em /dest/dir sem criar novos arquivos que não existem em /dest/dir yet ( -c ) .