Je suis un noob complet chez linux mais je commence à comprendre. J'ai un serveur Ubuntu 16.04 exécutant un serveur FTP pour sauvegarder les fichiers vidéo de sécurité. Les fichiers seront stockés dans des dossiers tels que : /home/securityfolder1
, /home/securityfolder2
, /home/securityfolder3
et ainsi de suite.
Notez que chacun securityfolderN
est un utilisateur différent.
Parce que je ne veux pas que mes disques durs soient pleins tout le temps, je veux supprimer quotidiennement des fichiers de plus de 7 jours dans ces dossiers.
files
cron
delete
automation
Jacco van de Wijgaart
la source
la source
/home
contient généralement un sous-dossier pour chaque utilisateur. Si vous ne voulez pas stocker vos sauvegardes en tant qu'utilisateurs différents (ce n'est pas vraiment une bonne idée), vous devriez envisager un autre emplacement, par exemple/home/security/backup1
, etc.Réponses:
Tout d'abord, cette commande recherchera et supprimera tous les fichiers de plus de 7 jours dans n'importe quel sous-répertoire
/home
dont le nom commence parsecurityuser
:Vous en avez besoin
-mtime +6
et non+7
parce que-mtime
compte des périodes de 24h. Comme expliqué dans la-atime
sectionman find
(-mtime
fonctionne de la même manière):Donc, pour trouver un fichier qui a été modifié il y a 7 jours ou plus, vous devez donc rechercher les fichiers qui ont été modifiés il y a plus de 6 jours
-mtime +6
.L'étape suivante consiste à exécuter cette commande une fois par jour. Étant donné que chacun
securityuserN
est un utilisateur différent (vous voudrez peut-être repenser cette configuration, cela rend tout plus compliqué), cela doit être exécuté en tant que root. Alors, éditez/etc/crontab
:Et ajoutez cette ligne:
Cela exécutera la
find
commande une fois par jour et supprimera les fichiers.la source
find '/home/securityuser/*' -mtime +6 -type f -delete
(avec tous les changements pertinents et appropriés dans la création d'utilisateurs) pourrait généralement être une meilleure idée quefind '/home/securityuser*' -mtime +6 -type f -delete
(pas de barre oblique) ...?/home/securityuserN
, donc sans barre oblique, ils ne seront pas trouvés.-name
:find /home/ -name 'securityuser*' -mtime +6 -type f -delete
'securityuser*'
. Le caractère générique doit être développé par le shell, pas parfind
, donc il aurait dû l'êtresecurityuser*
(sans guillemets). Voir la réponse mise à jour. Merci de l'avoir signalé, Stelio, je ne peux pas croire que personne ne l'ait remarqué auparavant! Ti vlakas!selon mes connaissances:
essayez la
find
commande comme ceci:la source
find /home/jacco/ -mtime +1 -type f -delete
et cela semble fonctionner. Comment puis-je automatiser cela?#!/bin/bash
et le code en dessous? ou suis-je vraiment stupide ici?find '/u*' -name local
. Ce sont des directives de ce genre-name "foo*"
qui doivent être citées lors de la création de caractères globaux.