Em geral, analisar ls
output é uma má ideia. Relacionados: Por que não analisa ls
?
Um quase funciona ls
answer
Uma maneira mais robusta de obter todos os arquivos de hoje com o GNU ls será:
ls -lrt --time-style=+'%Y%m%d' * | grep " $(date +'%Y%m%d') "
Isso faz com que o formato de data de cada arquivo seja um campo strongmente selecionado pelo grep com espaços de delimitação incluídos (que elimina a chance de um arquivo nomeado como uma data ser selecionado (a menos que também incluir os espaços no nome, improvável, mas ainda possível).
É claro que, se o nome do arquivo incluir espaços, a análise da saída de ls com awk {print $7}
será afetada e falhará (mais campos) (tente com um arquivo criado como touch ' 20171008 test'
.
Use um achado simples (GNU)
Como o que foi solicitado foi para arquivo (s) da data de hoje (um dia), podemos fazer uma seleção com -mtime
(para a data de modificação) ou -atime
ou -ctime
para os outros dois)
$ find . -daystart -type f -mtime -1 -not -mtime -0 -print
A opção -daystart
garante que o intervalo de tempo seja da meia-noite.
um -mtime -1
seleciona arquivos de um dia (e menos, por exemplo, hoje).
O -not -mtime -0
rejeita arquivos no futuro.
Não é tão simples encontrar
Quando o tempo em um intervalo (não limitado a dias inteiros) for necessário, esse encantamento pode ajudar:
find ./ -type f -newermt "$dstart" -not -newermt "$dend" -print
em que dstart
e dend
contêm os limites inicial e final:
dstart=$( date -d '20171006 22:10:12' )
dend=$( date -d '20171008 20:10:12' )
find ./ -type f -newermt "$dstart" -not -newermt "$dend" -print