Bonjour tout le monde,

Je cherche à faire un script qui récupère tout les dossiers d'un répertoire, puis qui ne garde que les dossiers appelés XXXX (X est un chiffre), les trie par ordre croissant, puis récupère le nom du dernier dossier.

Voici ce que j'ai fait :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
dernierdossier(){
# le script prend en paramètre un répertoire ($1)
dernierdossier=$(ls -l $1 | sed -e '1,$ s/\(.\).* \([^ ]*\)$/\1 \2/' -e '/^-/d' -e '1d' | tr -s ' ' ';' | cut -d ';' -f 2 | sed -e '/^[0-9]\{4\}/!d' | sort -n | tail -n 1)
echo $dernierdossier
# ...
}
Je commence avec un ls -l. Je récupère le type et le nom de chaque élément (1er sed => "d répertoiren" ou "- fichiern"), je supprime toutes les lignes correspondant à un fichier (seconde partie du sed) ainsi que la première ligne du ls (celle qui donne le total d'éléments, 3ieme partie du sed). Ensuite, je supprime le "d " avant le nom de fichier (tr puis cut), et je supprime toutes les lignes qui ne commencent pas par 4 chiffres (dernier sed).
Je trie ensuite par ordre lexicographique puis je récupère le dernier élément de la liste (sort et tail).

Et je le teste avec ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
mkdir "Test"
mkdir "Test/1000" "Test/1001"
mkdir "Test/dossier-inutile" "Test/9999dossier-inutile" "Test/dossier-inutile9999"
 
test=$(dernierdossier ./Stockage/)
echo $test
Et il me renvoie 9999dossier-inutile. Or je dois récupérer 1001.

Je n'arrive pas à conserver uniquement les dossiers dont le nom est 4 chiffres. Mon script ne récupère que les dossiers qui commencent par 4 chiffres. J'essaie de tâtonner du coté de awk mais je suis encore très faible en scripts shell.

Je vous passe les considérations sur l'inélégance totale de ce script ^^

Pour l'histoire, si je trouve la solution, je dois l'adapter à des noms de dossiers à 2 chiffres et des noms de fichiers à 2 chiffres d'une extension donnée (XX.fic)

En vous remerciant du temps que vous m'accorderez !