Encontre o número de arquivos no diretório que foi criado no ano específico

4

Eu gostaria de obter o número de arquivos em um diretório e seus subdiretórios (recursivamente) que foi criado no ano de 2016. Eu apenas me preocupo com arquivos que tenham um arquivo específico terminado, por exemplo, ".txt". Como posso conseguir isso no terminal?

    
por lijas 24.10.2017 / 11:25

3 respostas

4

Com o GNU find :

find /some/dir -type f -name '*.txt' -printf '%CY\n' | grep -Fxc 2016

Isso conta os arquivos com um ctime em 2016 no fuso horário local. Por favor, note que ctime não é o tempo de criação dos arquivos, mas é sobre a melhor aproximação que você pode esperar com a semântica padrão do UNIX.

Se você quiser corresponder o tempo de modificação, use -printf '%TY\n' acima em vez de -printf '%CY\n' .

    
por 24.10.2017 / 11:30
4

Esta é uma forma portátil que não requer GNUfind .

Primeiro crie arquivos com timestamp

touch -t 201601010000 /tmp/2016 && touch -t 201701010000 /tmp/2017

Em seguida, execute.

find /some/path -type f -name '*.txt'  -newer /tmp/2016 ! -newer /tmp/2017
    
por 24.10.2017 / 12:02
4

Com o GNU find e em sistemas e sistemas de arquivos que suportam o horário de nascimento :

find . -name '*.txt' -type f -newerBt 2016-01-01 \
                           ! -newerBt 2017-01-01 -printf . | wc -c

Tecnicamente, isso excluiria os arquivos criados no nanoegundo 00-01: 00: 00.000000000 2016-01-01 e incluiria aqueles criados naquele nanossegundo em 2017 (não espero que seu relógio tenha essa precisão ou que seja importante, mas pode importar em sistemas de arquivos que não suportem timestamps de subsegundos para arquivos criados por tarefas agendadas às 00:00:00, por exemplo)

Se o seu sistema não suportar o horário de nascimento, você pode reverter para a hora da última modificação (o que provavelmente é melhor, já que a hora de nascimento é o momento em que o arquivo foi instanciado, não o tempo foi escrito por isso tem pouca relevância na prática), alterando newerBt para newermt .

Com BSD find (de onde vêm esses -newerxy ), você pode alterá-lo para:

find .//. -name '*.txt' -type f -newerBt 2016-01-01 \
                              ! -newerBt 2017-01-01 | grep -c //
    
por 24.10.2017 / 12:21

Tags