Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Chapitre 08 : Gestion des fichiers et répertoires

Exemples pratiques tirés du fichier source 08-gestion_des_fichiers_et_repertoires.md.

Liste des scripts

Tests sur les fichiers

# Script Section Description
01 01_tests_existence.sh Tests de base d'existence Tests -e, -f, -d, -L sur fichiers, répertoires et liens symboliques
02 02_tests_permissions.sh Tests de permissions Tests -r, -w, -x sur fichiers avec permissions 444, 755 et 644
03 03_tests_contenu.sh Tests de contenu et taille Analyse avec -s, wc -c, wc -l, wc -w et aperçu head
04 04_tests_comparaisons.sh Tests avancés et comparaisons Comparaison par contenu (cmp), taille (wc -c) et date (-nt, -ot)
05 05_validation_fichier.sh Fonction de validation Validation complète : existence, type, permissions et taille

Parcours de répertoires

# Script Section Description
06 06_parcours_simple.sh Parcours simple avec for Parcours avec for, globstar et classification par extension
07 07_parcours_find.sh Parcours récursif avec find find -type f/d, comptage et filtrage par extension
08 08_parcours_actions.sh Parcours avec actions Traitement par type (sh, txt, jpg/png, pdf) avec statistiques
09 09_parcours_personnalise.sh Parcours personnalisé Parcours récursif avec indentation et modes (afficher, taille, complet)
10 10_recherche_filtrage.sh Recherche et filtrage Recherche multicritères : nom, extension, taille, date

Manipulation de chemins

# Script Section Description
11 11_extraction_chemins.sh Extraction d'informations basename, dirname, extension et type de chemin
12 12_construction_chemins.sh Construction de chemins Jointure de chemins et normalisation (doubles slashes)
13 13_resolution_chemins.sh Résolution et validation Expansion absolue, readlink, tests d'existence et permissions
14 14_utilitaires_chemins.sh Utilitaires de chemins Chemin sécurisé, nom unique et chemin relatif

Opérations courantes

# Script Section Description
15 15_copie_fichiers.sh Copie de fichiers Copie sécurisée avec modes normal/backup et vérification d'intégrité SHA-256
16 16_deplacement_renommage.sh Déplacement et renommage Déplacement sécurisé et renommage intelligent avec nettoyage de caractères
17 17_suppression_securisee.sh Suppression sécurisée Suppression avec corbeille et nettoyage par critères (temp, vide)
18 18_utilitaires_gestion.sh Utilitaires de gestion Synchronisation de répertoires, rapport espace disque et création de projet

Exécution

# Exécuter un script individuel
bash exemples/chapitre08/01_tests_existence.sh

# Exécuter tous les scripts
for script in exemples/chapitre08/*.sh; do
    echo "=== $(basename "$script") ==="
    bash "$script"
    echo ""
done

Note : Le script 04_tests_comparaisons.sh contient un sleep 2 pour créer des timestamps différents, il met quelques secondes de plus.

Sorties attendues

01_tests_existence.sh

=== Tests d'existence de fichiers ===
Éléments créés pour les tests :
(listing ls -la)

✅ 'fichier_test.txt' existe
✅ 'dossier_test' existe
❌ 'fichier_inexistant.txt' n'existe pas
✅ 'lien_symbolique' existe

=== Tests de type ===
📄 'fichier_test.txt' est un fichier régulier
📁 'dossier_test' est un répertoire
❌ 'fichier_inexistant.txt' n'existe pas
🔗 'lien_symbolique' est un lien symbolique

02_tests_permissions.sh

=== Tests de permissions ===
Fichiers créés avec permissions :
-rwxr-xr-x fichier_executable.sh
-r--r--r-- fichier_lecture_seule.txt
-rw-r--r-- fichier_normal.txt

Tests pour 'fichier_lecture_seule.txt' :
  ✅ Lisible
  ❌ Non modifiable
  ❌ Non exécutable

Tests pour 'fichier_executable.sh' :
  ✅ Lisible
  ✅ Modifiable
  ✅ Exécutable

Tests pour 'fichier_normal.txt' :
  ✅ Lisible
  ✅ Modifiable
  ❌ Non exécutable

03_tests_contenu.sh

=== Tests de contenu et taille ===
Analyse de 'fichier_avec_contenu.txt' :
  📏 Fichier non vide (29 octets)
  📊 1 ligne(s), 5 mot(s)
  👁️  Aperçu :
    Ce fichier contient du texte

Analyse de 'fichier_plusieurs_lignes.txt' :
  📏 Fichier non vide (24 octets)
  📊 3 ligne(s), 6 mot(s)

Analyse de 'fichier_vide.txt' :
  📄 Fichier vide
  📊 0 ligne(s), 0 mot(s)

04_tests_comparaisons.sh

=== Tests avancés et comparaisons ===
Comparaison de 'version1.txt' et 'version2.txt' :
  ❌ Contenus différents
  ✅ Tailles identiques (10 octets)
  📅 'version2.txt' est plus récent

Comparaison de 'version1.txt' et 'copie_version1.txt' :
  ✅ Contenus identiques
  ✅ Tailles identiques (10 octets)
  📅 'copie_version1.txt' est plus récent

05_validation_fichier.sh

=== Tests de validation ===
=== Validation de 'fichier_normal.txt' ===
✅ Fichier valide

=== Validation de 'fichier_vide.txt' ===
⚠️  Avertissements :
  - Fichier vide

=== Validation de 'script.sh' ===
✅ Fichier valide

=== Validation de 'dossier_test' ===
✅ Fichier valide

=== Validation de 'fichier_inexistant.txt' ===
❌ Erreurs détectées :
  - Fichier inexistant

06_parcours_simple.sh

=== Parcours simple de répertoires ===
Structure créée :
test_structure/
├── config.ini
├── docs/
│   ├── manual.pdf
│   └── readme.txt
├── images/
│   ├── photo1.jpg
│   └── photo2.png
└── scripts/
    ├── backup.sh
    └── deploy.sh

=== Contenu du répertoire test_structure ===
📄 config.ini (fichier)
📁 docs (dossier)
📁 images (dossier)
📁 scripts (dossier)

=== Classification par extension ===
  test_structure/config.ini → .ini
  test_structure/docs/manual.pdf → .pdf
  ...
Résumé par extension :
  .sh : 2 fichier(s)
  .txt : 1 fichier(s)
  ...

07_parcours_find.sh

=== Parcours récursif avec find ===
Tous les fichiers (récursif) :
  📄 test_structure/config.ini (0 octets)
  📄 test_structure/scripts/deploy.sh (0 octets)
  ...
Tous les répertoires :
  📁 test_structure (4 élément(s))
  📁 test_structure/scripts (2 élément(s))
  ...
Fichiers par type :
  Scripts (.sh) : backup.sh, deploy.sh
  Images : photo1.jpg, photo2.png
  Documents : manual.pdf, readme.txt

08_parcours_actions.sh

=== Parcours avec actions conditionnelles ===
Traitement de tous les fichiers :
❓ Fichier: config.ini (type: .ini)
🔧 Script: deploy.sh
   ⚠️  Non exécutable - Correction...
🖼️  Image: photo2.png
   📏 0 octets
📄 Document PDF: manual.pdf
   📏 0 octets
📝 Document texte: readme.txt
   📊 1 ligne(s)

09_parcours_personnalise.sh

=== Parcours personnalisé ===
Affichage simple :
📁 test_structure/
📄 config.ini
📁 docs/
  📄 manual.pdf
  📄 readme.txt
📁 images/
  📄 photo1.jpg
  ...

Avec tailles :
📁 test_structure/
📄 config.ini (0 octets)
...

Avec informations complètes :
📄 config.ini (0 octets, YYYY-MM-DD)
...

10_recherche_filtrage.sh

=== Recherche et filtrage avancés ===
Recherche de tous les scripts :
  extension = sh
  📄 test_structure/scripts/deploy.sh
  📄 test_structure/scripts/backup.sh
  Total : 2 fichier(s) trouvé(s)

Recherche de fichiers contenant 'photo' :
  📄 test_structure/images/photo2.png
  📄 test_structure/images/photo1.jpg
  Total : 2 fichier(s) trouvé(s)

11_extraction_chemins.sh

=== Manipulation de chemins ===
Chemin : '/home/utilisateur/documents/rapport.pdf'
  Nom de fichier : 'rapport.pdf'
  Répertoire : '/home/utilisateur/documents'
  Nom de base : 'rapport'
  Extension : 'pdf'
  Type : Chemin absolu

Chemin : 'fichier_sans_extension'
  Nom de fichier : 'fichier_sans_extension'
  Répertoire : '.'
  Pas d'extension
  Type : Chemin relatif
...

12_construction_chemins.sh

=== Construction de chemins ===
Résultat : '/home/user/documents/projets/mon_script.sh'
Résultat : './scripts/../config/app.conf'

=== Normalisation de chemins ===
'/home//user/documents/' → '/home/user/documents'
'///var///log///' → '/var/log'

13_resolution_chemins.sh

=== Résolution et validation de chemins ===
Validation de 'test_structure' :
  ✅ Répertoire
  Permissions : rwx

Validation de 'chemin_inexistant' :
  ❌ N'existe pas

14_utilitaires_chemins.sh

=== Utilitaires de manipulation de chemins ===
Création de chemins sécurisés :
  'mon fichier<>important.txt' → 'test_structure/docs/mon_fichierimportant.txt'
  'script|dangereux.sh' → 'test_structure/docs/scriptdangereux.sh'
  '  fichier avec espaces  ' → 'test_structure/docs/fichier_avec_espaces'

Création de noms uniques :
  Nom unique 1 : 'test_structure/nouveau_fichier_2.txt'
  Nom unique 2 : 'test_structure/nouveau_fichier_3.txt'
  Nom unique 3 : 'test_structure/nouveau_fichier_4.txt'

15_copie_fichiers.sh

=== Opérations de copie ===
1. Copie normale :
  📄 Copie de fichier...
  ✅ Copie réussie
  ✅ Intégrité vérifiée

2. Copie avec backup :
  💾 Sauvegarde existant vers : copie1.txt.backup.YYYYMMDD_HHMMSS
  ✅ Copie réussie
  ✅ Intégrité vérifiée

3. Copie de répertoire :
  📁 Copie récursive de répertoire...
  ✅ Copie réussie

16_deplacement_renommage.sh

=== Opérations de déplacement ===
1. Déplacement simple :
  ✅ Déplacement réussi
  ✅ Source supprimée

2. Renommage intelligent :
  ✅ Renommage réussi vers : test_structure/fichierrenommé_avec_espaces.txt

17_suppression_securisee.sh

=== Opérations de suppression ===
1. Suppression avec corbeille :
  🗑️  Déplacement vers la corbeille
  ✅ Déplacé vers la corbeille

2. Nettoyage des fichiers temporaires :
  🧹 Suppression des fichiers temporaires...
    Suppression : autre.tmp
  ✅ Nettoyage terminé

3. Nettoyage des fichiers vides :
  📄 Suppression des fichiers vides...
    Suppression : (fichiers vides listés)
  📁 Suppression des répertoires vides...
  ✅ Nettoyage terminé

18_utilitaires_gestion.sh

=== Utilitaires de gestion de fichiers ===
1. Synchronisation :
    📄 Nouveau : manual.pdf
    📄 Nouveau : readme.txt
  ✅ Synchronisation terminée

2. Rapport d'espace disque :
  📊 Taille totale : 15B
  📄 Top 10 des plus gros fichiers :
    15B - docs/readme.txt
    ...
  📊 Répartition par extension :
    .sh : 2 fichier(s)
    ...

3. Création de structure de projet :
  ✅ Structure créée avec succès (type web)
  mon_nouveau_projet/
  ├── docs/
  ├── src/
  │   ├── css/style.css
  │   ├── images/
  │   ├── index.html
  │   └── js/script.js
  └── tests/

Concepts couverts

  • Tests de fichiers : -e (existence), -f (fichier), -d (répertoire), -L (lien), -r/-w/-x (permissions), -s (non vide)
  • Comparaison : cmp -s (contenu), wc -c (taille), -nt/-ot (dates)
  • Parcours : for avec globs, shopt -s globstar, find -type f/d, filtrage par nom/extension/taille
  • Chemins : basename, dirname, readlink -m, construction et normalisation
  • Opérations : copie avec cp et vérification SHA-256, déplacement avec mv, suppression sécurisée
  • Utilitaires : synchronisation de répertoires, rapport d'espace disque (du, numfmt), création de structure de projet

Notes

  • Tous les scripts travaillent dans un répertoire temporaire (mktemp -d) et nettoient automatiquement via trap EXIT.
  • Le script 04_tests_comparaisons.sh utilise sleep 2 pour garantir des timestamps différents.
  • Les scripts 15 et 16 du .md original contiennent des read -p interactifs ; ils ont été adaptés pour fonctionner en mode non-interactif pour les tests.
  • Le script 16 inclut les fonctions joindre_chemin, creer_chemin_securise et creer_nom_unique (issues des scripts 12 et 14) pour être indépendant.
  • Le script 17 utilise une corbeille locale au répertoire temporaire au lieu de $HOME/.local/share/Trash.