Parece que perguntas de script bash são permitidas.
21373 Alan
@ MichaelScheper: Eu nem sei por onde começar com esse comentário.
Lightness Races em órbita
1
@ Notinlist: Aqui está a resposta: meta.stackexchange.com/questions/10249/… Infelizmente, parece que um prazo expirou. Pena, já que as pesquisas na web ainda chegam aqui, e a resposta aceita foi útil para muitas pessoas.
Michael Scheper
@ MichaelScheper: Se você puder encontrar uma opção para votar na migração para o unix.stackexchange.com, por todos os meios me aponte para ela. Como você não tem o representante para ver a caixa de diálogo fechar, darei uma dica: não há uma. Considere ser menos combativo quando não tiver ideia do que está falando. Agradecimentos para sua atenção.
Lightness Races in Orbit
5
@LightnessRacesinOrbit: Peço desculpas por parecer 'combativo'. Não tenho permissão para editar meus comentários, mas para referência futura, foi meu comentário elogiando a pergunta que o ofendeu? Devo dizer que estou me sentindo um pouco cego, mesmo depois de dar ao seu comentário anterior o benefício da dúvida. Na verdade, eu estava tentando ser mais construtivo do que adicionar outro 'eu também', pesquisando como a migração funciona: meta.stackexchange.com/a/10250/249555 O prazo de 60 dias oculta essa opção, talvez? Desculpe pelo boi boi. Obrigado novamente - sinceramente - pelo seu tempo e atenção.
Michael Scheper
Respostas:
323
Como apontado por Max, você não pode, mas a verificação de arquivos modificados ou acessados não é tão difícil. Eu escrevi um tutorial sobre isso, ainda hoje. A essência do qual é usar -newerXYe ! -newerXY:
Exemplo: para encontrar todos os arquivos modificados em 7 de junho de 2007:
$ find .-type f -newermt 2007-06-07!-newermt 2007-06-08
Para encontrar todos os arquivos acessados em 29 de setembro de 2008:
$ find .-type f -newerat 2008-09-29!-newerat 2008-09-30
Ou arquivos com permissão alterada no mesmo dia:
$ find .-type f -newerct 2008-09-29!-newerct 2008-09-30
Se você não alterar as permissões no arquivo, 'c' normalmente corresponderia à data de criação.
Minha versão do find (GNU 4.2.32) parece não suportar os predicados -newerXY. É necessária uma versão mínima específica? Ou é um caso de compilação de localização com um comutador de configuração especial?
Yukondude 01/10/08
1
@yukondude: Você está certo. A versão do find que eu tenho localmente - GNU 4.4.0 - possui, enquanto o 4.1.20 que eu tenho no Dreamhost não. O kludge com a criação de dois arquivos também deve funcionar.
Arve
1
Em alguns sistemas (FreeBSD, OS / X ...) -newerBtcorresponderá ao horário de nascimento (criação) do arquivo .
Stephane Chazelas
3
Observe que ele -newerxtestá disponível no FreeBSD desde 2001 (onde foi fornecido pela primeira vez como patch em 1998), alguns outros BSDs e GNU encontram (desde 4.3.3 em 2007), com base no HP / UX find, que foi introduzido -newerXY(mas onde Y == t não é suportado).
Stephane Chazelas
Usando: find (GNU findutils) 4.4.0, essa sintaxe não funciona no SUSE ext3, se ele deveria listar arquivos / w mtime nessa data, não retorna nada
O problema é que eu quero testar para uma data específica, não dentro de um período de tempo.
Sverrejoh 01/10/08
1
Então, descubra quantos dias atrás isso é e use esse número.
Jkfreitas1
15
ctimenão tem nada a ver com o tempo de criação , é o tempo de mudança do inode.
Stephane Chazelas
47
São duas etapas, mas eu gosto de fazer desta maneira:
Primeiro, crie um arquivo com uma data / hora específica. Nesse caso, o arquivo é 01/10/2008 à meia-noite
touch -t 0810010000/tmp/t
Agora podemos encontrar todos os arquivos mais recentes ou mais antigos que o arquivo acima (passando pela data de modificação do arquivo. Você também pode usar -anewer para o status do arquivo acessado e -cnewer alterado).
find /-newer /tmp/t
find /-not -newer /tmp/t
Você também pode procurar arquivos entre determinadas datas criando dois arquivos com toque
+1 para solução para um mais antigo findque carece-newerXY
Felipe Alvarez
1
IMO, agora essa deve ser a solução aceita. Não consegui que o -newermt fosse executado no kernel 2.6.18-348.18.1.el5, muito menos nos kernels mais recentes.
DarkForce 20/05
O mesmo aqui no DarkForce, a funcionalidade newermt parece ser muito instável
É isso que a maioria das pessoas quer, mas não recebeu votos suficientes !!!
S03 /
2
isso pode não funcionar com alguns milhões de arquivos em um diretório.
Dennis Nolte
3
Existem efeitos colaterais se o termo de pesquisa grep estiver no nome do arquivo.
Snorex
mywiki.wooledge.org/ParsingLs - uma abordagem melhor é provavelmente imprimir a data de criação em formato legível por máquina, talvez com statse você não tiver find -printf.
Tripleee
12
Você não pode. A opção -c informa quando as permissões foram alteradas pela última vez, -a testa o tempo de acesso mais recente e -m testa o tempo de modificação. O sistema de arquivos usado pela maioria dos tipos de Linux (ext3) não suporta um registro de "tempo de criação". Desculpe!
De fato, não é apenas o tipo de sistema de arquivos - não há interface do sistema para obter essas informações, mesmo que o sistema de arquivos as contenha. Uma das deficiências do Unix remonta aos primeiros dias, e é por isso que o Unix nunca decola.
chrisdowney
1
Unix nunca vai decolar?
Lucid_dreamer 28/10/19
8
@ Max: está certo sobre o momento da criação.
No entanto, se você quiser calcular o argumento dias decorrido para um dos -atime, -ctime, -mtimeparâmetros, você pode usar a seguinte expressão
Substitua "2008-09-24" pela data desejada e ELAPSED_DAYS será definido como o número de dias entre então e hoje. (Atualização: subtraia uma do resultado para alinhar com findo arredondamento da data.)
Portanto, para encontrar qualquer arquivo modificado em 24 de setembro de 2008, o comando seria:
find .-type f -mtime $((( $(date +%s)- $(date -d '2008-09-24'+%s))/60/60/24-1))
Isso funcionará se a sua versão do findnão suportar os -newerXYpredicados mencionados na resposta do @Arve :.
Respostas:
Como apontado por Max, você não pode, mas a verificação de arquivos modificados ou acessados não é tão difícil. Eu escrevi um tutorial sobre isso, ainda hoje. A essência do qual é usar
-newerXY
e! -newerXY
:Exemplo: para encontrar todos os arquivos modificados em 7 de junho de 2007:
Para encontrar todos os arquivos acessados em 29 de setembro de 2008:
Ou arquivos com permissão alterada no mesmo dia:
Se você não alterar as permissões no arquivo, 'c' normalmente corresponderia à data de criação.
fonte
-newerBt
corresponderá ao horário de nascimento (criação) do arquivo .-newerxt
está disponível no FreeBSD desde 2001 (onde foi fornecido pela primeira vez como patch em 1998), alguns outros BSDs e GNU encontram (desde 4.3.3 em 2007), com base no HP / UX find, que foi introduzido-newerXY
(mas onde Y == t não é suportado).find location -ctime time_period
Exemplos de time_period:
Há mais de 30 dias:
-ctime +30
Menos de 30 dias atrás:
-ctime -30
Exatamente há 30 dias:
-ctime 30
fonte
ctime
não tem nada a ver com o tempo de criação , é o tempo de mudança do inode.São duas etapas, mas eu gosto de fazer desta maneira:
Primeiro, crie um arquivo com uma data / hora específica. Nesse caso, o arquivo é 01/10/2008 à meia-noite
Agora podemos encontrar todos os arquivos mais recentes ou mais antigos que o arquivo acima (passando pela data de modificação do arquivo. Você também pode usar -anewer para o status do arquivo acessado e -cnewer alterado).
Você também pode procurar arquivos entre determinadas datas criando dois arquivos com toque
Encontrará arquivos entre as duas datas e horários
fonte
find
que carece-newerXY
Você pode fazer isso:
Exemplo:
fonte
stat
se você não tiverfind -printf
.Você não pode. A opção -c informa quando as permissões foram alteradas pela última vez, -a testa o tempo de acesso mais recente e -m testa o tempo de modificação. O sistema de arquivos usado pela maioria dos tipos de Linux (ext3) não suporta um registro de "tempo de criação". Desculpe!
fonte
@ Max: está certo sobre o momento da criação.
No entanto, se você quiser calcular o argumento dias decorrido para um dos
-atime
,-ctime
,-mtime
parâmetros, você pode usar a seguinte expressãoSubstitua "2008-09-24" pela data desejada e ELAPSED_DAYS será definido como o número de dias entre então e hoje. (Atualização: subtraia uma do resultado para alinhar com
find
o arredondamento da data.)Portanto, para encontrar qualquer arquivo modificado em 24 de setembro de 2008, o comando seria:
Isso funcionará se a sua versão do
find
não suportar os-newerXY
predicados mencionados na resposta do @Arve :.fonte
Com as opções -atime, -ctime e -mtime para encontrar, você pode se aproximar do que deseja alcançar.
fonte
fonte
`ls ...`
obras, ele não utiliza afind
ferramenta.Encontrei este scriplet em um script que exclui todos os arquivos com mais de 14 dias:
Eu acho que um pouco mais de "man find" e procurar os parâmetros -ctime / -atime etc. ajudarão você aqui.
fonte