Simplesmente, já que você marcou linux , você tem o% Comandostat
disponível, que extrairá o tempo de modificação de um arquivo, e o comando GNU date
, que extrairá a hora de um dado momento:
find . -type f -exec sh -c '
h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' \
sh {} \; -ls
Se os resultados parecem corretos, então:
find . -type f -exec sh -c '
h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' \
sh {} \; -delete
Aqui está uma execução de teste com a versão -ls
:
$ touch -d 'Wed Sep 12 11:00:01 EDT 2018' 11am
$ touch -d 'Wed Sep 12 12:00:02 EDT 2018' 12pm
$ touch -d 'Wed Sep 12 15:00:03 EDT 2018' 303pm
$ find . -type f -exec sh -c 'h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' sh {} \; -ls
1705096 0 -rw-r--r-- 1 user group 0 Sep 12 2018 ./11am
1705097 0 -rw-r--r-- 1 user group 0 Sep 12 2018 ./12pm
Agradecemos a Kusalananda por escrever a excelente resposta que eu segui, em: Entendendo a opção -exec de 'find'
Observe que não queremos a {} +
versão de find
aqui, pois queremos que os resultados de -exec
sejam por arquivo, para que possamos excluir apenas arquivos que correspondam ao intervalo de tempo.
O script de shell incorporado possui duas partes principais: determinar o registro de data e hora "hora" do arquivo e, em seguida, retornar sucesso ou falha com base no intervalo. A primeira parte é realizada em duas partes. A variável é atribuída ao resultado da substituição do comando; o comando deve ser lido de dentro para fora:
-
$(stat -c %Y "$1")
- esta (segunda) chamada de substituição de comandosstat
no parâmetro$1
do script de shell incorporado;$1
foi atribuído porfind
como um dos nomes de caminho encontrados. A opção% Y para o comandostat
retorna o tempo de modificação em segundos desde a época. -
date -d @ ... +%-H
- isso leva os segundos desde a época da substituição do comando acima e pede quedate
nos forneça a parte Horas desse tempo; a@
sintaxe informadate
que estamos dando segundos desde a época como um formato de entrada. Com a opção-
no formato de saída da data, informamos a data do GNU para não preencher o valor com qualquer zeros à esquerda. Isso evita qualquer má interpretação posterior.
Quando tivermos a variável $h
Hour atribuída, usamos o operador condicional bash [[
para perguntar se esse valor é maior que ou igual a 11 e também estritamente menor que 15.