Extraire le contenu d'un coup d'un contexte
Voici comment extraire tout le contenu de plusieurs fichiers dans une sous-arborescence :
.venv) [nancmdzk@TOLX302130067 ~/workspace/techdata-ansible-collection] (docs/roles_documentation)$ tree techdata/monitoring/roles/kibana/
techdata/monitoring/roles/kibana/
├── defaults
│ └── main.yml
├── files
│ └── node.options
├── handlers
│ └── main.yml
├── meta
│ ├── argument_specs.yml
│ └── main.yml
├── README.md
├── tasks
│ ├── cleanup_old_facts.yml
│ ├── configure.yml
│ └── main.yml
├── templates
│ └── kibana.yml.j2
├── tests
│ └── main.yml
└── vars
└── main.yml
8 directories, 12 files
La commande magique :
find techdata/monitoring/roles/kibana/ -type f -exec echo -e "\n=== {} ===" \; -exec cat {} \;
La même commande magique extraite dans un fichier :
find techdata/monitoring/roles/kibana/ -type f -exec echo -e "\n=== {} ===" \; -exec cat {} \; > kibana_full_export.txt
Notice explicative des options de la commande :
find techdata/monitoring/roles/kibana/: Outil de recherche et chemin du dossier de départ où fouiller.-type f: Restreint la recherche aux fichiers uniquement (f pour file). Cela permet d'ignorer les dossiers et d'éviter les erreurs de lecture.-exec ... \;: Indique à la commandefindd'exécuter une action spécifique sur chaque élément trouvé. Le\;sert à marquer la fin de l'instruction à exécuter.echo -e "\n=== {} ===": La première action exécutée. Elle affiche le nom du fichier comme un titre.-e: Active l'interprétation des caractères spéciaux, comme le\nqui crée un saut de ligne pour aérer la lecture.{}: C'est la variable defind. Elle est remplacée dynamiquement par le chemin du fichier actuellement traité.
-exec cat {} \;: La deuxième action exécutée immédiatement après. La commandecatlit et affiche l'intégralité du contenu du fichier (représenté par{}).> kibana_full_export.txt: Redirige la sortie standard (tout ce qui se serait affiché dans le terminal) pour l'écrire directement dans un fichier texte.