tâche cron pour supprimer des fichiers de plus de 99 jours
Je dois faire un tâche cron pour supprimer des fichiers de plus de 99 jours dans un répertoire particulier, mais je ne suis pas sûr que les noms de fichier ont été faites par des utilisateurs de Linux. Je dois attendre des caractères spéciaux, des espaces, des caractères barre oblique, et d'autres.
Voici ce que je pense pourrait fonctionner:
find /path/to/files -mtime +99 -exec rm {}\;
Mais j'imagine que ce sera un échec si il y a des caractères spéciaux ou s'il trouve un fichier en lecture seule, (cron ne peut pas être exécuté avec les privilèges de super-utilisateur). J'ai besoin d'elle pour aller sur si elle répond à ces fichiers.
Je voudrais au moins ajouter un
comme find /chemin/vers/les fichiers de type f -atime +99 -execdir rm-f {}\;
-type f
pour trouver les options.comme find /chemin/vers/les fichiers de type f -atime +99 -execdir rm-f {}\;
OriginalL'auteur user1469220 | 2012-06-20
Vous devez vous connecter pour publier un commentaire.
Lorsque vous utilisez
-exec rm {} \;
, vous ne devriez pas avoir de problèmes avec les espaces, tabulations, retours, ou caractères spéciaux parce quefind
appelle larm
commande directement et il passe le nom de chaque fichier un par un.Répertoires de ne pas " être supprimés avec la commande parce que vous n'êtes pas en lui passant le
-r
paramètre, et vous ne voulez probablement pas trop. Qui pourrait finir par être un peu dangereux. Vous pouvez également inclure le-f
paramètre à faire une force dans le cas où vous n'avez pas l'autorisation d'écriture. Exécutez le script cron en tant que root, et vous devriez être bien.Le seul truc que j'aimerais vous inquiéter, c'est que vous pourriez finir par frapper un fichier que vous ne souhaitez pas supprimer, mais n'a pas été modifié depuis 100 jours. Par exemple, le mot de passe pour arrêter le autodestruct séquence à votre travail. Les Chances sont que le fichier n'a pas été modifiée depuis 100 jours, mais une fois que autodestruct séquence commence, vous ne voulez pas le seul à blâmer, car le mot de passe a été perdu.
Bien, plus raisonnable, peut-être des applications qui sont utilisées, mais rarement modifié. Peut-être quelqu'un cv qui n'a pas été mis à jour, car ils sont maintenant en cours d'emploi, etc.
Alors, soyez prudent avec vos hypothèses. Juste parce qu'un fichier n'a pas été modifiée dans les 100 jours ne signifie pas qu'il n'est pas utilisé. Une meilleure critères (bien que toujours discutable) est de savoir si le fichier a été accédé depuis plus de 100 jours. Peut-être cela comme une commande finale:
Une chose de plus...
Certains
find
commandes ont un-delete
paramètre qui peut être utilisé à la place de la-exec rm
paramètre:Qui va supprimer à la fois les répertoires et les fichiers.
Une plus petite recommandation: Pour la première semaine, enregistrer les fichiers dans un fichier journal au lieu de les retirer, et puis examinez le fichier journal. De cette façon, vous vous assurez que vous n'êtes pas effacer quelque chose d'important. Une fois que vous êtes heureux que il n'y a rien dans le fichier journal que vous ne voulez pas toucher, vous pouvez supprimer ces fichiers. Après une semaine, et vous êtes convaincu que vous n'allez pas supprimer quelque chose d'important, vous pouvez revenir à la
find
commande pour faire le supprimer pour vous.À l'aide de
-execdir
ne fonctionne pas. Il exécutera larm
commande à partir du répertoire où le fichier est trouvé, mais le{}
ne sera pas coupé, de sorte que le nom de fichier non valide. En passant, j'ai ajouté le-type f
de la commande, de sorte que nous ne parlons que des fichiers.Une chose de plus. Ce n'est pas un standard d'Unix trouver paramètre, mais il est disponible sur de nombreux trouver des commandes. Vous pourriez être en mesure d'utiliser le
-delete
paramètre et oublier le-exec
entièrement. Voir mes commentaires dans ma réponse ci-dessus.OriginalL'auteur David W.
Si vous exécutez
rm
avec le-f
option, votre fichier sera supprimé, indépendamment de savoir si vous avez l'autorisation d'écriture sur le fichier ou pas (tout ce qui compte c'est le dossier qui le contient). Donc, soit vous pouvez effacer tous les fichiers dans le dossier, ou aucun. Ajouter également-r
si vous souhaitez effacer les sous-dossiers.Et je dois dire que c': être très attention! Vous jouez avec le feu 😉 je vous suggère de débogage avec quelque chose de moins dangereux likfe la
file
commande.Vous pouvez tester cela en créant un tas de fichiers comme, par exemple:
Et le réglage des permissions, comme souhaité sur chacun d'eux
Je ne pense pas que vous pouvez avoir des retours à la ligne dans un fichier, et cette solution doit également gérer les espaces. Pourquoi ne pas lui donner un aller et le rapport si il n'y a pas de problèmes?
OriginalL'auteur Miquel
Vous devez utiliser
-execdir
au lieu de-exec
. Mieux encore, lire l'intégralité de l' Les considérations de sécurité pourtrouver
chapitre dans lefindutils
manuel.rm
de commande, il n'y a pas de problème avec l'aide de-exec
au lieu de-execdir
. Un fichier commençant par un tiret ou un espace dans il ne causera pas de problèmes. Il y aurait un problème si l'OP a l'aide desh -c rm
. Meilleur pari est d'utiliser-delete
si elle est disponible.OriginalL'auteur lanzz
S'il vous plaît, utilisez toujours
rm [opts] -- [files]
, cela vous évitera de faire des erreurs avec les fichiers comme-rf
wiich seraient autrement considérés comme des options. Lorsque vous fournissez des noms de fichier, puis à la fin de toutes les options.OriginalL'auteur MBO