Como posso listar recursivamente todos os arquivos que foram alterados entre 22.12.2011 e 24.12.2011?
files
recursive
timestamps
braçadeira
fonte
fonte
Respostas:
De um modo geral, quando você estiver procurando arquivos em um diretório e seus subdiretórios recursivamente, use
find
.A maneira mais fácil de especificar um intervalo de datas
find
é criar arquivos nos limites do intervalo e usar o-newer
predicado.fonte
-newer
é necessário aqui?-newer
não é negado, o segundo é. "Encontre arquivos que são mais recentes que,start
mas não novos, questop
".start
estop
.Usando a solução de Gilles e depois de ler o homem, encontre (1) novamente, encontrei uma solução mais simples. A melhor opção é o -newerXY. Os sinalizadores m e t podem ser usados.
Então a solução é
O limite inferior em inclusivo e o limite superior são exclusivos, então eu adicionei 1 dia a ele! E é recursivo. Funciona bem no find v4.5.9.
fonte
find -newermt 20150212 \! -newermt 20150213 | xargs grep 'keyword' -m 50 -l
(-m 50
= pesquisa nas primeiras 50 linhas).-exec ... +
emfind(1)
, como:find -newermt 20150212 \! -newermt 20150213 -exec grep keyword -m 50 -l {} +
. Isso faz o mesmo, mas mais barato.find 4.7.0-git
).Além das respostas já dadas, observe que você pode especificar diretamente suas datas:
ou
se você desejar especificar adicionalmente a hora.
fonte
Supondo que você não precise de precisão em segundos, isso deve funcionar.
EDIT: Alterado
cmin
parammin
após o comentário de @ Eelvex. EDIT: '\!' ausência defonte
-cmin
é "alteração de status",-mmin
é "alteração de dados". Você provavelmente quer-mmin
find
pode levar um datetime no formato ISO; portanto, para um servidor no UTC, por exemplo, você pode especificar um deslocamento de várias horas a partir de onde estiver. Isso também garante a adição de um dia, pois você também está comparando o tempo:fonte
Observe que a pergunta marcada como duplicada e, portanto, não pode responder diretamente, é por isso que estou postando aqui. Esta resposta é para responder à pergunta "precisa mover arquivos para uma pasta diferente com base na data de criação [duplicada]"
As respostas são razoáveis, mas houve algumas limitações com um comando puramente encontrar. Eu escrevi esse shell script para percorrer um diretório com tantos arquivos, que o sistema de arquivos estava engasgando com os metadados tentando executar um ls. Além disso, alguns sistemas * nix apresentam um erro de muitos argumentos ao executar ls.
O comando find é muito poderoso e comecei com os métodos listados, mas eu tinha tantos anos de dados nesse diretório que precisei passar todos os arquivos repetidamente. Isso produz um monte de desnecessário passado por cada arquivo. Tentei fazer uma tela por ano e executar várias descobertas, mas isso resultou em muitos erros em cada descoberta e os arquivos desapareceriam quando uma das descobertas a movia.
Meu script de shell move um arquivo para o diretório de destino, com um ano de 4 dígitos e um mês de 2 dígitos. Ele pode ser facilmente expandido para um dia de 2 dígitos, descomentando algumas linhas e comentando suas contrapartes. Eu acredito que é mais eficiente porque foi executar os movimentos em uma passagem de localização, de modo que vários comandos e passagens sobre o diretório são desnecessários.
Uma vez salvo e tornado executável, você pode chamar esse script com os seguintes itens.
Você não precisa se preocupar em definir a opção newermt para find, pois tudo o que find está fornecendo é uma única execução por arquivo encontrado e o script toma todas as decisões.
Lembre-se de que, se você não selecionar -type f, os diretórios serão movidos e provavelmente causarão problemas. Você também pode usar -type d se estiver procurando mover apenas diretórios. Não definir o tipo quase certamente produzirá comportamento indesejado.
Lembre-se de que esse script foi adaptado às minhas necessidades. Você pode simplesmente usar minha construção como inspiração para um script mais adequado às suas necessidades. Obrigado!
Considerações: A eficiência do comando pode ser EXTREMAMENTE melhorada, permitindo que um número ilimitado de argumentos passe pelo script. Isso é relativamente fácil se você passar a variável $ @. Estender a funcionalidade disso nos permitiria usar a função -exec + do find ou alavancar xargs, por exemplo. Posso implementar isso rapidamente e melhorar minha própria resposta, mas isso é um começo.
Como essa foi uma sessão de script única, provavelmente há muitas melhorias que podem ser feitas. Boa sorte!
fonte