[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
Bonjour à tous,

J'ai créé le code suivant :
#! /bin/bash

set max1 = 0
set max2 = 0

if (test -e directory1/Sousdirectory-1) then
    max1 = $(ls directory1/Sousdirectory-*/    | grep -o '[0-9][0-9]*' | tail -1)
    max2 = $(ls directory2/Sousdirectory-*/ | grep -o '[0-9][0-9]*' | tail -1)
fi

set max = $max1

if [ "$max1" < "$max2" ]
    then
    max = $max2
fi

echo max = $max

max = $(expr $max + 1)

mkdir directory1/Sousdirectory-$max
mkdir directory2/Sousdirectory-$max


Je voudrais que :
- si dans directory1, il n'y a pas de sous-répertoire Sousdirectory-*, alors je veux créer Sousdirectory-1
- si dans directory1, il y a un sous-répertoire Sousdirectory-1, 2 ..., n, je veux créer le sous-répertoire Sousdirectory-(n+1).
Idem pour le directory2.

Merci d'avance pour votre précieuse aide.
A voir également:

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
Quand j'exécute ce petit programme, il m'affiche :

max =
command not found

Je ne vois pas trop ce qui le gêne ...
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
23 mai 2007 à 15:48
Salut,

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
;-))
0
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
J'ai un soucis avec le calcul du max et du min :
@ 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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
23 mai 2007 à 18:52
Écrit ta syntaxe comme ça :
@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.
0
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
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é.
:))
0