Tenho uma câmera IP que grava vídeos em uma estrutura de pastas como esta:
├── 2023
│ ├── 10
│ ├── 11
│ │ ├── cam_00_20240921153706.mp4
│ │ ├── cam_00_20240921153928.mp4
│ │ ├── cam_00_20240921164743.mp4
│ │ └── cam_00_20240921230558.mp4
│ └── 12
└── 2024
├── 08
└── 09
├── 21
│ ├── cam_00_20240921153706.mp4
│ ├── cam_00_20240921153928.mp4
│ ├── cam_00_20240921164743.mp4
│ ├── cam_00_20240921230558.mp4
│ └── cam_00_20240921230646.mp4
└── 22
├── cam_00_20240922101839.mp4
└── cam_00_20240922102150.mp4
Agora eu gostaria de apagar todos os arquivos com mais de 2 dias, e todas as pastas vazias. Para fazer isso, eu fiz
#delete files older than 2 days
find /recordings/????/??/?? -depth -type d -mtime +2 -exec rm -rf {} \;
#delete empty month dir
find /recordings/????/?? -depth -empty -type d -mtime +2 -exec rm -rf {} \;
#delete empty year dir
find /recordings/???? -depth -empty -type d -mtime +2 -exec rm -rf {} \;
Isso pode ser feito com uma frase de efeito? Ou de uma forma mais legal?
find
tem um-o
parâmetro (ou), que permite combinar dois comandos:Explicação:
find /recordings/
- Pesquisar recursivamente a partir do/recordings/
diretório.-type f -mtime +2 -exec rm -f {} \;
- Encontre arquivos com mais de 2 dias e exclua-os.-o
- Operador OR para combinar diferentes expressões de busca.-type d -empty -exec rmdir {} \;
- Encontre diretórios vazios e remova-os.