Com GNU ou FreeBSD find
e GNU ou BSD tar
:
find . -type f -newermt 2018-02-28 ! -newermt 2018-03-01 -print0 |
tar -cf file.tar --null -T -
(note que exclui arquivos modificados pela última vez no nano-segundo exato 2018-02-28T00: 00: 00.000000000 (e pode incluir um arquivo no dia seguinte) que em sistemas de arquivos com nano-segundo a granularidade quase nunca aconteceria, a menos que os arquivos fossem criados com touch -t
/ touch -d
ou fossem extraídos de arquivos que não armazenam registros de data e hora com precisão abaixo de segundos)
POSIXly e assumindo que os nomes de arquivo não contenham caracteres de nova linha (o formato de arquivo tar padrão também tem limitações extras nos nomes de arquivo):
touch -d 2018-02-28T00:00:00 .start
touch -d 2018-03-01T00:00:00 .end
find . -type f -newer .start ! -newer .end ! -path ./.start ! -path ./.end |
pax -x ustar -w > file.tar
Se você quisesse que todos os arquivos regulares fossem modificados pela última vez em 28 de fevereiro, e não apenas em 2018, com as ferramentas GNU:
find . -type f -printf '%Tm-%Td-%pfind . -type f -newermt 2018-02-28 ! -newermt 2018-03-01 -print0 |
tar -cf file.tar --null -T -
' |
sed -nz 's/^02-28-//p' |
tar -cf file.tar --null -T -
A saída de find -ls
não é pós-processável automaticamente de forma confiável, destina-se apenas ao consumo humano.