AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 700442
Accepted
FarO
FarO
Asked: 2022-04-27 06:04:48 +0800 CST2022-04-27 06:04:48 +0800 CST 2022-04-27 06:04:48 +0800 CST

Como excluir arquivos com base na data de criação de outros arquivos?

  • 772

Eu tenho uma câmera de segurança rodando Linux (busybox 1.32.0) que posso configurar para gravar vídeo continuamente em pedaços (configuráveis) de 30 segundos em uma estrutura de pastas:

recording/2022/04/26/15/2022-04-26-15-30-00.mp4

Em outra pasta, as imagens estáticas são gravadas somente quando o movimento é detectado:

stills/2022/04/26/15/2022-04-26-15-30-05.jpg

Esta é uma solução que inventei para obter vídeos antes mesmo de um movimento ser detectado.

Como o espaço disponível é limitado, gostaria de excluir qualquer vídeo iniciado mais de 60 segundos antes do movimento e 120 segundos após o movimento, para que eu mantenha alguns pré e pós-vídeo para cada imagem estática.

As imagens estáticas podem ser tão frequentes quanto a cada 5 segundos, pois são baseadas em disparos por movimento e não em um intervalo predefinido.

Claro, com uma única imagem é uma questão de executar "find" com as opções apropriadas , mas e o meu caso de uso mais complexo?

Eu pensei em algumas maneiras possíveis, mas não tenho certeza de como proceder.

Pensei em executar um script todos os dias que listasse os elementos (gravações e fotos) do dia anterior, convertesse de nome de arquivo em carimbo de data e hora de cada um deles e comparasse iterativamente os carimbos de data e hora com os carimbos de data e hora das imagens estáticas.

Isso envolveria 4 listas (nomes de arquivos, carimbos de data/hora, para gravações e fotos) e me parece bastante envolvido (talvez porque não esteja familiarizado com scripts de shell), então existe uma maneira mais fácil de fazer isso?

Soluções envolvendo python ou perl exigiriam a compilação para a plataforma, e podem impor uma carga muito alta na CPU, sem contar que o espaço livre no dispositivo já é limitado e um executável samba 4.x já não caberia.

As ferramentas disponíveis são aquelas disponíveis como parte do busybox mais os binários listados no site do projeto .

shell-script timestamps
  • 2 2 respostas
  • 571 Views

2 respostas

  • Voted
  1. Best Answer
    thanasisp
    2022-04-29T19:04:08+08:002022-04-29T19:04:08+08:00

    Sem usar o conceito de tempo, confie nos nomes dos arquivos e no fato de que classificá-los em ordem alfabética é o mesmo que classificar por tempo.

    Primeiro passo:

    $ busybox sh
    $ target="/2022/04/26"
    $ busybox find recording/"$target" stills/"$target" -type f | busybox sort -t/ -k6 |\
    busybox grep -B2 -A4 'jpg$' | busybox grep 'mp4$' > keep.txt
    

    Obtenha gravações e fotos por um período de tempo com find, sortos argumentos pelo nome do arquivo. Fotos e vídeos juntos são classificados por tempo agora. greppara as fotos, mantendo as falas antes e depois de qualquer partida (brinque com -B, -A para ver o quanto você gostaria) e por fim pegue apenas as gravações para guardar.

    A saída intermediária do primeiro grepficaria assim, para 2 antes, 4 depois:

    recording/2022/04/26/15/2022-04-26-15-31-30.mp4
    recording/2022/04/26/15/2022-04-26-15-32-00.mp4
    stills/2022/04/26/15/2022-04-26-15-32-05.jpg
    recording/2022/04/26/15/2022-04-26-15-32-30.mp4
    recording/2022/04/26/15/2022-04-26-15-33-00.mp4
    recording/2022/04/26/15/2022-04-26-15-33-30.mp4
    recording/2022/04/26/15/2022-04-26-15-34-00.mp4
    --
    recording/2022/04/26/15/2022-04-26-15-36-30.mp4
    recording/2022/04/26/15/2022-04-26-15-37-00.mp4
    stills/2022/04/26/15/2022-04-26-15-37-29.jpg
    recording/2022/04/26/15/2022-04-26-15-37-30.mp4
    stills/2022/04/26/15/2022-04-26-15-37-34.jpg
    recording/2022/04/26/15/2022-04-26-15-38-00.mp4
    recording/2022/04/26/15/2022-04-26-15-38-30.mp4
    recording/2022/04/26/15/2022-04-26-15-39-00.mp4
    recording/2022/04/26/15/2022-04-26-15-39-30.mp4
    

    Segundo passo:

    $ busybox find recording/"$target" -type f | busybox grep -vf keep.txt | busybox xargs echo rm
    

    para excluir os arquivos a serem mantidos das gravações e remover o restante deles.


    Notas:

    Os nomes dos arquivos devem ser planos, sem espaços e caracteres especiais, não sei se mais opções funcionam para o seu busybox. Para a versão que instalei e executei o comando, 1.34, vejo que -print0existe para find, e -zpara sort, mas não para grep, e -0para xargs também existe.

    Também assumimos que todas as gravações existem para o período alvo. Mas mesmo que não tenham, não removemos nenhum fragmento útil, na pior das hipóteses poderíamos manter apenas mais alguns, por exemplo, se não houver vídeo em torno de uma foto, manteremos os fragmentos mais próximos, independentemente de quando forem .

    • 2
  2. Siméon Dekens
    2022-04-27T06:52:50+08:002022-04-27T06:52:50+08:00

    É definitivamente possível usar um script de shell, mas você terá um trabalho mais fácil usando Python. Você pode conferir o módulo os para Python, que permite obter todos os arquivos em um diretório.

    Então tudo o que você precisa fazer é comparar o nome do arquivo com um regex e excluir os arquivos indesejados.

    • -1

relate perguntas

  • Subtraindo a mesma coluna entre duas linhas no awk

  • Um script que imprime as linhas de um arquivo com seu comprimento [fechado]

  • exportar variáveis ​​​​env programaticamente, via stdout do comando [duplicado]

  • Dividir por delimitador e concatenar problema de string

  • MySQL Select com função IN () com array bash

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve