1
votes

Comment parcourir le répertoire et les sous-répertoires et obtenir le nom du répertoire parent?

Je parcours des dossiers et je trouve les dossiers qui ont une extension de fichier spécifique. Sur la base du résultat de la recherche, j'obtiens le chemin du répertoire sous la forme -

Par exemple

./Config/SysMapping.txt

./Config/exclusion_list_old.txt

Je veux simplement obtenir le nom:

Configuration

et supprimer

./

avant

Configuration

et tout après Config, c'est-à-dire

/SysMapping.txt


2 commentaires

Dirname fait-il tout pour vous?


Oui dirname fait tout pour moi


3 Réponses :


2
votes

dirname supprimerait le fichier à la fin de votre chemin. Dans votre exemple, vous vous retrouveriez avec ./Config . Vous pouvez ensuite diriger ceci vers awk '{gsub (/^\.\//, ""); print} ' pour supprimer le ./ .


0 commentaires

4
votes

Cela extraira le premier élément de chemin après ./ et supprimera les doublons:

P=./Config/SysMapping.txt
P=${P%/*}  # --> ./Config
P=${P#./}  # --> Config
echo "$P"

Dans bash, vous pouvez faire:

echo ./Config/SysMapping.txt | awk -F/ '{print $2}' | sort -u


1 commentaires

Cela a parfaitement fonctionné pour moi. J'ai pu faire ce que je voulais faire. Merci beaucoup.



0
votes

Vous pouvez utiliser le paramètre globstar :

shopt -s globstar nullglob
files=(**/*.txt)

# if there cannot be newlines in filenames
printf '%s\n' "${files[@]%/*}" | sort -u

# if there can be newlines in filenames
printf '%s\0' "${files[@]%/*}" | sort -zu | tr '\0' '\n'

Le tr est là juste pour imprimer les noms de répertoire joliment à la fin. Vous pouvez choisir de traiter différemment les noms de répertoires délimités par null, avec une boucle while par exemple.


0 commentaires