Prefiro não fazer isso em PHP, por isso espero que alguém decente em scripts de shell possa ajudar.
Eu preciso de um script que percorra o diretório recursivamente e encontre todos os arquivos com a data da última modificação superior a alguma data. Em seguida, ele tarará e compactará o (s) arquivo (s) mantendo as informações do caminho.
Respostas:
tão simples quanto:
onde
find . -mtime -1
selecionará todos os arquivos no diretório atual (recursivamente) modificado no dia anterior. você pode usar frações, por exemplo:fonte
-newermt
é muito melhor.-type f
apenas aos arquivos selecionados. Isso mantém a estrutura da pasta, mas faz backup apenas dos arquivos com alterações.Se você possui o GNU
find
, há uma legião de opções relevantes. O único problema é que a interface para eles é menos do que estelar:-mmin n
(tempo de modificação em minutos)-mtime n
(hora da modificação em dias)-newer file
(hora da modificação mais recente que a hora do arquivo)-daystart
(ajuste a hora de início da hora atual para o início do dia)A parte difícil é determinar o número de minutos desde então.
Uma opção que vale a pena considerar: use
touch
para criar um arquivo com o carimbo de data / hora de modificação necessário; então usefind
com-newer
.Ele procura por arquivos mais recentes que 2009-01-03T12: 31: 43. Claramente, em um script,
/tmp/wotsit
haveria um nome com o PID ou outro valor para torná-lo único; e haveria umtrap
para garantir que ele seja removido, mesmo que o usuário interrompa, e assim por diante.fonte
-newermt '2009-01-03T12:31:43'
para evitar a necessidade de criar um arquivo apenas para referência.-newermt
(documentado em-newerXY
uma vez que existem várias opções; neste caso, X = m, Y = t). A localização do GNU nos sistemas Linux (quase arcaicos) que eu uso não suporta as opções, portanto é uma chegada relativamente recente. Obrigado pela atenção.-newermt '-2 weeks'
.-newermt '2009-01-03T12:31:43'
parece incrível, mas infelizmente parece interpretar tudo no fuso horário errado: lists.gnu.org/archive/html/bug-findutils/2012-12/msg00009.htmlVocê pode fazer isso diretamente com tar e ainda melhor:
Isso instrui o tar a compactar arquivos mais recentes que 1º de janeiro de 2014, 18:00:00.
fonte
tar
fornecidas com o OS X e o FreeBSD suportam apenas o--newer
que é a opção longa-N
no GNUtar
.Isso funcionará para algum número de arquivos. Você deseja incluir "-print0" e "xargs -0" caso algum dos caminhos possua espaços. Este exemplo procura por arquivos modificados nos últimos 7 dias. Para encontrar aqueles modificados antes dos últimos 7 dias, use "+7".
Como esta página avisa, o xargs pode fazer com que o comando tar seja executado várias vezes se houver muitos argumentos, e o sinalizador "-c" pode causar problemas. Nesse caso, você deseja o seguinte:
Você não pode atualizar um arquivo tar compactado com tar, portanto, é necessário bzip2 ou gzip em uma segunda etapa.
fonte
-type f
apenas aos arquivos selecionados. Isso mantém a estrutura da pasta, mas apenas faz backup dos arquivos com alterações / adicionadas recentemente.Isso deve mostrar todos os arquivos modificados nos últimos 7 dias.
Coloque isso no tar / zip, e você deve ser bom.
fonte
bem no linux tente ler a página de manual do comando find
algo assim deveria
e você tem
fonte
Você pode obter uma lista dos arquivos modificados pela última vez depois de x dias atrás com:
Então você só precisa tar e compactar arquivos na lista resultante, por exemplo:
para todos os arquivos modificados durante o mês passado.
fonte
Eu simplesmente faria o seguinte para fazer backup de todos os novos arquivos de 7 dias atrás
observe que você também pode substituir '7 dias atrás' por qualquer coisa que atenda às suas necessidades
Pode ser :
date -d'yesterday' +"%d-%b"
Ou até:
date -d'first Sunday last month' +"%d-%b"
fonte
Este script encontrará arquivos com uma data de modificação de dois minutos antes e depois da data especificada (e você pode alterar os valores nas condições conforme sua exigência)
Por exemplo, você deseja que os arquivos tenham data de modificação apenas antes da data especificada, você pode alterar
120
para0
no$DIFF_IN_DATE
parâmetro descartando as condições do$DIFF_IN_DATE1
parâmetro.Da mesma forma, se você deseja que os arquivos tenham data de modificação 1 hora antes e depois da data especificada, substitua
120
por3600
inif CONDITION
.fonte