Embora você possa fazer isso com um loop e stat
, se realmente quiser, isso é algo que find
é bom e pode ser feito em uma única linha. Você pode criar um arquivo de timestamp especial toda vez que o script for executado e, em seguida, selecionar todos os arquivos mais recentes / antigos que o arquivo:
find -name "*.$filetype" ! -newer timestamp.file
Isso localizará todos os arquivos na árvore de diretórios nomeados de acordo com o padrão *.$filetype
e que são mais antigos (não !
newer) do que o arquivo de registro de data e hora, como você pediu. Se você quiser arquivos mais recentes (o que parece ser mais útil), basta retirar o !
.
Encontrando os arquivos, você pode pedir ao find
para fazer algo com eles usando '-exec:
find -name "*.$filetype" -newer timestamp.file -exec cp '{}' "$destination" +
Isso executará cp
com todos os arquivos correspondentes como argumentos, para serem colocados no diretório nomeado por $destination
, copiando todos os arquivos correspondentes para esse diretório.
No final de cada execução do seu script, você pode atualizar o registro de data e hora em seu arquivo de comparação com touch
:
touch timestamp.file
e esse é o ponto de comparação que será usado na próxima vez. Se os arquivos puderem ser modificados enquanto o script estiver em execução, você precisará ser um pouco mais cuidadoso - atualize o arquivo de registro de data e hora logo no início, mas copie o antigo com seus atributos fora do caminho usando cp -p
, e use isso para comparação (ou vice-versa).
Para comparar com o tempo atual (como no título), o -mtime
test para find
pode ser útil, mas acho que, no texto, o que você realmente quer é obter as alterações entre duas execuções do roteiro.
A tarring, interação do usuário, etc em seu script pode permanecer intocada. Se você quiser apenas arquivos no diretório atual (não subdiretórios), adicione -maxdepth 1
.