[Shell] Création de Fichiers
Résolu/Fermé
xavdoug
Messages postés
21
Date d'inscription
samedi 21 avril 2007
Statut
Membre
Dernière intervention
16 novembre 2007
-
21 mai 2007 à 23:22
xavdoug Messages postés 21 Date d'inscription samedi 21 avril 2007 Statut Membre Dernière intervention 16 novembre 2007 - 24 mai 2007 à 04:32
xavdoug Messages postés 21 Date d'inscription samedi 21 avril 2007 Statut Membre Dernière intervention 16 novembre 2007 - 24 mai 2007 à 04:32
A voir également:
- [Shell] Création de Fichiers
- Creation compte gmail - Guide
- Création compte google - Guide
- Media creation tool - Télécharger - Systèmes d'exploitation
- Wetransfer gratuit fichiers lourd - Guide
- Création organigramme - Guide
4 réponses
xavdoug
Messages postés
21
Date d'inscription
samedi 21 avril 2007
Statut
Membre
Dernière intervention
16 novembre 2007
23 mai 2007 à 12:38
23 mai 2007 à 12:38
Quand j'exécute ce petit programme, il m'affiche :
max =
command not found
Je ne vois pas trop ce qui le gêne ...
max =
command not found
Je ne vois pas trop ce qui le gêne ...
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
23 mai 2007 à 15:48
23 mai 2007 à 15:48
Salut,
Si je me souviens bien normalement ton shell c'est du "csh", non ?
Donc :
Si je me souviens bien normalement ton shell c'est du "csh", non ?
Donc :
#! /bin/csh if ( -d directory1/Sousdirectory-1 ) then @ max1 = `ls directory1/ | grep -o '[0-9][0-9]*' | tail -1` @ max2 = `ls directory2/ | grep -o '[0-9][0-9]*' | tail -1` else echo "Le répertoire n'existe pas." exit endif @ max = $max1 if ( "$max1" < "$max2" ) then @ max = $max2 endif echo max = $max @ max = $max + 1 mkdir directory1/Sousdirectory-$max mkdir directory2/Sousdirectory-$max;-))
xavdoug
Messages postés
21
Date d'inscription
samedi 21 avril 2007
Statut
Membre
Dernière intervention
16 novembre 2007
23 mai 2007 à 18:19
23 mai 2007 à 18:19
J'ai un soucis avec le calcul du max et du min :
Mes sous-dossiers sont classés comme suit :
Sousdirectory-1
Sousdirectory-10
Sousdirectory-11
...
Sousdirectory-55
Sousdirectory-6
Sousdirectory-7
Sousdirectory-8
Sousdirectory-9
Seulement avec cette méthode, j'obtiens min = 1 (correct) et max = 9 (au lieu de 55). Comment puis-je m'y prendre dans ce cas pour calculer les valeurs correctement ?
J'ai d'ailleurs, du mal à comprendre ce que fait réellement le grep -o [0-9][0-9] ... combien faudrait-il de crochets dans le cas d'un max égal à plusieurs millions ?
Merci d'avance pour votre aide
@ min = `ls directory1/Sousdirectory-* | grep -o '[0-9][0-9]*' | head -1` @max = `ls directory2/Sousdirectory-* | grep -o '[0-9][0-9]*' | tail -1`
Mes sous-dossiers sont classés comme suit :
Sousdirectory-1
Sousdirectory-10
Sousdirectory-11
...
Sousdirectory-55
Sousdirectory-6
Sousdirectory-7
Sousdirectory-8
Sousdirectory-9
Seulement avec cette méthode, j'obtiens min = 1 (correct) et max = 9 (au lieu de 55). Comment puis-je m'y prendre dans ce cas pour calculer les valeurs correctement ?
J'ai d'ailleurs, du mal à comprendre ce que fait réellement le grep -o [0-9][0-9] ... combien faudrait-il de crochets dans le cas d'un max égal à plusieurs millions ?
Merci d'avance pour votre aide
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
23 mai 2007 à 18:52
23 mai 2007 à 18:52
Écrit ta syntaxe comme ça :
-n : comparaison sur les valeurs numériques
-t- : séparateur de champ (le tiret)
+1 : comparaison sur le champ 2 (les champs commencent à 0)
Édit : pffffffffffffffffffff ça ira plus vite et c'est moins compliqué, mais que je suis..........................bête des fois :
que fait réellement le grep -o [0-9][0-9]*
Il ne renvoie que la partie de la ligne correspondant à la "regex" (expression régulière).
Ici on ne recherche que des valeurs numériques
combien faudrait-il de crochets dans le cas d'un max égal à plusieurs millions ?
C'est pas les crochets qui comptent en fait, c'est l'étoile (*) qui signifie de 0 à n chiffres. La répétition ([0-9][0-9]) n'est là que pour signifier qu'il en faut au moins 1.
@max = `ls directory2 | sort -n -t- +1 | grep -o '[0-9][0-9]*' | tail -1`sort : trie les valeurs suivant les options qui suivent (man sort)
-n : comparaison sur les valeurs numériques
-t- : séparateur de champ (le tiret)
+1 : comparaison sur le champ 2 (les champs commencent à 0)
Édit : pffffffffffffffffffff ça ira plus vite et c'est moins compliqué, mais que je suis..........................bête des fois :
@max = `ls directory2 | grep -o '[0-9][0-9]*' | sort -n | tail -1`
que fait réellement le grep -o [0-9][0-9]*
Il ne renvoie que la partie de la ligne correspondant à la "regex" (expression régulière).
Ici on ne recherche que des valeurs numériques
combien faudrait-il de crochets dans le cas d'un max égal à plusieurs millions ?
C'est pas les crochets qui comptent en fait, c'est l'étoile (*) qui signifie de 0 à n chiffres. La répétition ([0-9][0-9]) n'est là que pour signifier qu'il en faut au moins 1.
xavdoug
Messages postés
21
Date d'inscription
samedi 21 avril 2007
Statut
Membre
Dernière intervention
16 novembre 2007
24 mai 2007 à 04:32
24 mai 2007 à 04:32
Comme d'habitude, tout est parfait et le programme tourne.
Tu es vraiment le meilleur jipicy !!
Merci encore pour les nombreuses fois où tu m'as aidé.
:))
Tu es vraiment le meilleur jipicy !!
Merci encore pour les nombreuses fois où tu m'as aidé.
:))