#!/bin/bash # ============================================ # SCRIPT DE SUPPRESSION SÉCURISÉE (srm) # Une alternative simple à rm pour débutants # ============================================ # Où les fichiers supprimés seront stockés CORBEILLE="$HOME/.corbeille" # ============================================ # FONCTION 1: Créer le dossier corbeille # ============================================ creer_corbeille() { # Vérifier si le dossier corbeille existe, sinon le créer if [ ! -d "$CORBEILLE" ]; then mkdir -p "$CORBEILLE" fi } # ============================================ # FONCTION 2: Afficher l'aide/instructions # ============================================ afficher_aide() { echo "Safe Remove (srm) - Deletes files safely by moving them to trash" echo "" echo "Usage:" echo " srm Move a file to trash" echo " srm -r Move a folder to trash" echo " srm --list Show all files in trash" echo " srm --restore Bring back a file from trash" echo " srm --empty Delete everything in trash permanently" echo " srm --help Show this help message" echo "" echo "Examples:" echo " srm myfile.txt Move myfile.txt to trash" echo " srm -r myfolder Move myfolder to trash" echo " srm --list See what's in trash" echo " srm --restore myfile.txt Restore myfile.txt" echo "" } # ============================================ # FONCTION 3: Afficher le contenu de la corbeille # ============================================ lister_corbeille() { # Vérifier si la corbeille est vide if [ -z "$(ls -A $CORBEILLE 2>/dev/null)" ]; then echo "La corbeille est vide !" return fi echo "Fichiers dans la corbeille:" echo "------------------------" # Parcourir chaque élément dans la corbeille for element in "$CORBEILLE"/*; do # Obtenir juste le nom du fichier (pas le chemin complet) nomfichier=$(basename "$element") # Obtenir la taille du fichier taille=$(du -h "$element" | cut -f1) echo " $nomfichier [$taille]" done echo "------------------------" } # ============================================ # FONCTION 4: Vider la corbeille (suppression définitive) # ============================================ vider_corbeille() { # Vérifier si la corbeille est vide if [ -z "$(ls -A $CORBEILLE 2>/dev/null)" ]; then echo "La corbeille est déjà vide !" return fi # Demander confirmation à l'utilisateur echo "ATTENTION: Ceci supprimera définitivement tous les fichiers de la corbeille !" echo -n "Êtes-vous sûr ? Tapez 'oui' pour continuer: " read reponse # Vérifier si l'utilisateur a tapé 'oui' if [ "$reponse" = "oui" ]; then rm -rf "$CORBEILLE"/* echo "Corbeille vidée avec succès !" else echo "Annulé. Rien n'a été supprimé." fi } # ============================================ # FONCTION 5: Restaurer un fichier de la corbeille # ============================================ restaurer_fichier() { nomfichier=$1 # Vérifier si le fichier existe dans la corbeille if [ ! -e "$CORBEILLE/$nomfichier" ]; then echo "Erreur: '$nomfichier' introuvable dans la corbeille" echo "Utilisez 'srm --list' pour voir les fichiers disponibles" return fi # Déplacer le fichier vers le répertoire courant mv "$CORBEILLE/$nomfichier" "./$nomfichier" echo "Restauré: $nomfichier" } # ============================================ # FONCTION 6: Déplacer fichier/dossier vers la corbeille # ============================================ deplacer_vers_corbeille() { element=$1 # Vérifier si le fichier/dossier existe if [ ! -e "$element" ]; then echo "Erreur: '$element' n'existe pas" return fi # Obtenir juste le nom du fichier nomfichier=$(basename "$element") # Ajouter un horodatage pour éviter d'écraser des fichiers avec le même nom horodatage=$(date +%Y%m%d_%H%M%S) nouveau_nom="${nomfichier}_${horodatage}" # Déplacer vers la corbeille mv "$element" "$CORBEILLE/$nouveau_nom" echo "Déplacé vers la corbeille: $element" } # ============================================ # LE PROGRAMME PRINCIPAL COMMENCE ICI # ============================================ # D'abord, s'assurer que le dossier corbeille existe creer_corbeille # Vérifier si l'utilisateur a fourni des arguments if [ $# -eq 0 ]; then echo "Erreur: Aucun fichier spécifié" echo "Utilisez 'srm --help' pour les instructions" exit 1 fi # Traiter la commande selon ce que l'utilisateur a tapé case $1 in --help|-h) # Afficher l'aide afficher_aide ;; --list) # Lister les fichiers dans la corbeille lister_corbeille ;; --empty) # Vider la corbeille vider_corbeille ;; --restore) # Restaurer un fichier if [ -z "$2" ]; then echo "Erreur: Veuillez spécifier un fichier à restaurer" echo "Exemple: srm --restore monfichier.txt" else restaurer_fichier "$2" fi ;; -r) # Supprimer un répertoire if [ -z "$2" ]; then echo "Erreur: Veuillez spécifier un dossier à supprimer" elif [ -f "$2" ]; then echo "Erreur: Ceci est fichier, merci de specifier un repertoire avec -r" else deplacer_vers_corbeille "$2" fi ;; *) # Suppression de fichier normale if [ -d "$1" ]; then echo "Erreur: Please use option -r to delete a directory." else deplacer_vers_corbeille "$1" fi ;; esac