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
) .