A melhor maneira de fazer esse tipo de operação é usando o comando find
. Tem muitas abordagens; Vou explicar dois destes:
1) Intervalos de tempo relativo
Nessa abordagem, você pode especificar exatamente os registros de data e hora de início e término e filtrar todos os arquivos que não forem modified/accessed/changed
durante esse período. Você pode fazer isso usando o comando touch
, salvando um arquivo com um timestamp específico.
No próximo exemplo, criamos dois marcadores ( timestamp_begin_file
e timestamp_end_file
), definidos como 3 HOURS AGO
e 1 HOUR AGO
. Em seguida, usamos as opções newerct
e ! newerct
para selecionar arquivos mais recentes depois de 3 horas e não mais recentes e depois 1 hora (basta dar uma olhada em change
time neste exemplo). Todos os arquivos selecionados serão copiados na pasta $DESTINATION_PATH
.
touch -t $(date -d '3 HOUR AGO' +%Y%m%d%H%M.%S) timestamp_begin_file
touch -t $(date -d '1 HOUR AGO' +%Y%m%d%H%M.%S) timestamp_end_file
find "$FOLDER" -newerct timestamp_begin_file ! -newermt timestamp_end_file -exec cp {} $DESTINATION_PATH \;
2) Intervalos de tempo absoluto
Você pode usar as opções newermt
para filtrar arquivos desnecessários em um intervalo de datas específico. Aqui, selecionamos apenas arquivos modificados durante o dia de 2007-06-07
:
find . -type f -newermt 2007-06-07 ! -newermt 2007-06-08 -exec cp {} $DESTINATION_PATH \;
Como eu disse, muitas outras alternativas existem (como sugerido por @Jaleks, -a/m/ctime
, mas devido à falta de informação, não podemos saber qual caso é adequado para você).
Para mais informações sobre filtragem de tempo em find
, dê uma olhada no página de localização