A sintaxe que você está usando encontrará arquivos com mais de 24 horas. Para o seu tempo atual de Fri Mar 21 16:10:42 UTC 2014
, isso seria arquivos modificados antes de Fri Mar 20 16:10:42 UTC 2014
. No entanto, a partir da sua pergunta, parece que você deseja que os arquivos sejam modificados antes de Fri Mar 21 00:00:00 UTC 2014
.
A maneira de fazer isso é criar um arquivo temporário e alterar o horário de modificação para a meia-noite daquele dia (basta especificar apenas a data). O comando find
pode então comparar com esse arquivo. Isso funcionará no Linux:
time_file=$(mktemp)
touch -d "$(date +%F)" "$time_file"
find $dir_dcn -maxdepth 1 -type f -name "*.pcap" ! -newer "$time_file" \
-exec ls -lt {} + |
tail -15 |
awk '{print $(NF-1)}'
rm "$time_file"
Note que +%F
não é POSIX, aqui você teria que usar +%Y-%m-%d
(também mktemp
não é POSIX, mas pode ser encontrado na maioria dos sistemas Unix-like). Observe também as diferenças no formato de hora da saída que você publicou. No primeiro, o nome do arquivo é campo 9, no segundo campo 8. Isso irá variar dependendo de como as variáveis de ambiente relacionadas ao código de idioma estão definidas. Eu contornei isso fazendo awk
imprimir o último campo em vez de um número de campo específico. Isso funcionará enquanto não houver espaços, etc. nos nomes de arquivos.
Atualizar
Na verdade, olhando mais atentamente para o resultado esperado x esperado, parece que o que aconteceu é que houve tantos arquivos que xargs
fez mais de uma execução de ls
. Isso impediria que os arquivos fossem classificados corretamente. Como os arquivos são datados, a coisa mais simples a fazer é canalizar para sort
em vez de usar ls
.
time_file=$(mktemp)
touch -d "$(date +%F)" "$time_file"
find $dir_dcn -maxdepth 1 -type f -name "*.pcap" ! -newer "$time_file" |
sort |
tail -15
rm "$time_file"