Eu sou um noob completo no linux, mas estou começando a pegar o jeito. Eu tenho um Ubuntu Server 16.04 executando um servidor FTP para fazer backup de arquivos de vídeo de segurança. Os arquivos serão armazenados em pastas como: /home/securityfolder1
, /home/securityfolder2
, /home/securityfolder3
e assim por diante.
Observe que cada securityfolderN
um é um usuário diferente.
Como não quero que meus discos rígidos estejam cheios o tempo todo, desejo excluir arquivos com mais de 7 dias nessas pastas diariamente.
files
cron
delete
automation
Jacco van de Wijgaart
fonte
fonte
/home
geralmente contém uma subpasta para cada usuário. Se você não deseja armazenar seus backups como usuários diferentes (não é uma boa ideia), considere outro local, por exemplo,/home/security/backup1
e assim por diante.Respostas:
Primeiro, este comando encontrará e excluirá todos os arquivos com mais de 7 dias em qualquer subdiretório
/home
cujo nome comece porsecurityuser
:Você precisa
-mtime +6
e não+7
porque-mtime
conta períodos de 24 horas. Conforme explicado na-atime
seção deman find
(-mtime
funciona da mesma maneira):Portanto, para encontrar um arquivo que foi modificado há 7 ou mais dias, é necessário encontrar arquivos que foram modificados há mais de 6 dias
-mtime +6
.O próximo passo é executar esse comando uma vez por dia. Como cada
securityuserN
um é um usuário diferente (convém repensar essa configuração, isso torna tudo mais complicado), isso deve ser executado como root. Então edite/etc/crontab
:E adicione esta linha:
Isso executará o
find
comando uma vez por dia e excluirá os arquivos.fonte
find '/home/securityuser/*' -mtime +6 -type f -delete
(com todas as alterações pertinentes e apropriadas na criação do usuário) geralmente pode ser uma ideia melhor do quefind '/home/securityuser*' -mtime +6 -type f -delete
(sem barra) ...?/home/securityuserN
, portanto, sem a barra, eles não serão encontrados.-name
:find /home/ -name 'securityuser*' -mtime +6 -type f -delete
'securityuser*'
. O curinga deve ser expandido pelo shell, não porfind
, portanto deveria ter sidosecurityuser*
(sem aspas). Veja a resposta atualizada. Obrigado por apontar, Stelio, não acredito que ninguém tenha notado antes! Ti vlakas!conforme meu conhecimento:
find
comando try assim:fonte
find /home/jacco/ -mtime +1 -type f -delete
e parece funcionar. Como posso automatizar isso?#!/bin/bash
e o código sob isso? ou eu sou realmente estúpido aqui?find '/u*' -name local
. São diretivas como-name "foo*"
essa que devem ser citadas ao conter caracteres glob.