J'ai écrit un script qui supprime tous sauf les deux derniers fichiers d'un dossier:
#!/bin/bash
ls -1 --quoting-style=shell-always /path/to/some/folder \
| head -n -2 \
| xargs printf -- "'/path/to/some/folder/%s'\n" \
| xargs sudo rm -rf
Ce script sera exécuté en tant que tâche cron tous les jours.
Le raisonnement est le suivant:
-
Obtenir une liste de tous les fichiers en utilisant
ls -1
(pour que j'obtienne un fichier par ligne); -
Supprimez les deux derniers de la liste en utilisant
head -n -2
; -
Puisque
ls
imprime les chemins relatifs, utilisez l'élémentxargs printf
pour ajouter le chemin du dossier et en faire un chemin absolu; -
Envoyez-les à
sudo rm -rf
en utilisantxargs
.
Tout le monde a accès à ce dossier, donc tout le monde peut créer et supprimer tous les fichiers de ce dossier.
Le problème est: sudo rm -rf
est effrayant.xargs sudo rm -rf
est incroyablement effrayant.
Je veux être sûr que personne ne peut endommager d'autres dossiers / systèmes en créant des fichiers intelligents à supprimer (accidentellement ou volontairement).Je ne sais pas, quelque chose d'intelligent comme:
file with / spaces.txt
ce qui pourrait entraîner un sudo rm -rf /
super effrayant.
EDIT: Mon erreur, les noms de fichiers ne peuvent pas contenir head -n -2
0, donc ce problème spécifique ne se produirait pas, mais la question de savoir s'il existe ou non d'autres risques demeure.
C'est pourquoi j'utilise head -n -2
1, cela devrait empêcher toute astuce avec des fichiers avec des espaces.Mais maintenant, je me demande si quelqu'un pourrait être plus intelligent avec des espaces et guillemets dans le nom du fichier, peut-être.
Mon script est-il sécurisé?
Remarque: j'ai besoin de head -n -2
2 car j'accède au dossier à distance (à partir d'un lecteur réseau mappé en utilisant head -n -2
3), et je ne pourrais pas le faire fonctionner sans sudo.