Votre navigateur est obsolète. Téléchargez un navigateur moderne, par exemple FireFox.
Léa-Linux : Forum
Le forum de Léa abrite des discussions autour des Logiciels libres.
Syndication
  • RSS ForumForum complet
  • RSS Forum - DéveloppementForum - Développement
  • RSS Forum - Développement - 319620Cette discussion

Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Important : quand vous posez une question, n'oubliez pas de nous donner les indications suffisantes pour que nous puissions répondre. En effet, la divination n'est pas le fort du Linuxien averti. Pour une meilleure compréhension, le bon usage de la grammaire et de l'orthographe est fortement encouragé. En particulier, le langage SMS est à éviter absolument. En cas d'abus, il pourra être censuré sans autre forme de procès.
Les messages dont le contenu est illégal (incitant à la haine - raciale ou autre, diffamant), ou dont le contenu est sans rapport avec le sujet du forum, ou qui sont parfaitement stupides ou hors sujet seront supprimés sans pitié. Il pourra même être fait appel au fournisseur d'accès du coupable pour faire cesser ses agissements.
» Index du forum » Développement » Programmation shell et création de dossiers/fichiers
Aller à la discussion: PrécédentSuivante
Action: Nouveau sujetChercherS'authentifier
Programmation shell et création de dossiers/fichiers
Auteur: Philippe Manin (IP enregistrée)
Date: le 24 mars 2007 à 19:23

Bonjour, je cherche à créer 40 dossiers dans lesquels se trouvent 16 fichiers intitulés fichier1, fichier2, fichier3... Les dossiers eux s'appellent dossier1, dossier2, dossier3...
En fait, il s'agit donc de 2 boucles imbriquées (la boucle des dossiers contenant la boucle des fichiers) mais le problème, c'est que je dois réaliser cela en shell et je ne sais pas trop comment procéder.
En fait, c'est surtout pour les boucles que je ne comprend pas trop (je suis plus habitué au c++, j'ai un peu de mal avec le shell) et pour donner un nom aux fichiers par concaténation de "fichier" (et "dossier") et du nombre en cours (nombre incrémenter à chaque boucle), les commandes (mkdir, touch...) ne me posent pas trop de problème.

Merci d'avance à ceux qui pourront m'aider ! :)

Re: Programmation shell et création de dossiers/fichiers
Auteur: Basile STARYNKEVITCH (IP enregistrée)
Date: le 24 mars 2007 à 19:44

D'abord, tu pourrais faire ça en C++ si ça t'es plus simple (appels système mkdir(2) et creat(2) ou open(2)). Et ça aurais été plus rapide que de demander ici...

Ensuite, tu peux faire ça dans d'autres shells (par exemple zsh)
#! /bin/zsh
## pas testé - à vos risques et périls
for ((i=1; i<=20,; i++)) do
  dir="/le/chemin/repertoire_$i"
  mkdir $dir
  for ((j=0; i<10; j++)) do
     fichier="$dir/fichier_$j"
     touch $fichier
  done
  ls $dir
done


ou dans d'autres langages, comme Ocaml
#!/usr/bin/ocaml
#load "unix.cma"
(* non testé - à vos risques *)
for i=1 to 20 do
  let dir=Printf.sprintf "/le/chemin/repertoire_%d" i in
  Unix.mkdir dir;
  for j=0 to 9 do
     let fichier= Printf.sprintf "%s/fichier_%d" dir j in
     let fd= Unix.openfile fichier [ Unix.O_CREAT;	Unix.O_WRONLY ] 0o540 in
     Unix.close fd
  done
done


Pur les puristes, on peut faire plus court mais c'est moins lisible.



----

Basile STARYNKEVITCH où on trouve mon mél

Membre de l'APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!

N.B. N'hesitez pas à consulter aussi mes contributions antérieures.

Re: Programmation shell et création de dossiers/fichiers
Auteur: Basile STARYNKEVITCH (IP enregistrée)
Date: le 24 mars 2007 à 19:46

Zut, la permission octale aurait dû être 0o640 pas 0o540 image : fache

----

Basile STARYNKEVITCH où on trouve mon mél

Membre de l'APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!

N.B. N'hesitez pas à consulter aussi mes contributions antérieures.

Re: Programmation shell et création de dossiers/fichiers
Auteur: Philippe Manin (IP enregistrée)
Date: le 24 mars 2007 à 20:36

Merci, le code fonctionne très bien, j'ai juste eu à enlever une virgule qui c'était glissé dans le premier (for) et à remplacer le i par un j dans la 2e boucle. Merci beaucoup !!!

#! /bin/zsh
## pas testé - à vos risques et périls
for ((i=1; i<=20; i++)) do
  dir="/le/chemin/repertoire_$i"
  mkdir $dir
  for ((j=0; j<10; j++)) do
     fichier="$dir/fichier_$j"
     touch $fichier
  done
  ls $dir
done

Re: Programmation shell et création de dossiers/fichiers
Avatar
Auteur: twocats (IP enregistrée)
Date: le 26 mars 2007 à 15:20

Une variante :
#!/bin/sh

FOLDER="1"

until [ "${FOLDER}" -gt "40" ]
do
mkdir dossier"${FOLDER}"
i="1"
	until [  "${i}" -gt "16" ]
	do
		touch fichier"${i}"
		mv fichier"${i}" ./dossier"${FOLDER}"
		i=$((i + 1))
	done
FOLDER=$((FOLDER + 1))
done


-------------------
La réponse est 42

Re: Programmation shell et création de dossiers/fichiers
Avatar
Auteur: Frédéric Brugmans (IP enregistrée)
Date: le 27 mars 2007 à 16:08

for rep in $( seq 40 ) 
 do  mkdir dossier$rep 
  for fichier in $( seq 20 )
  do touch dossier$rep/fichier$fichier  
 done 
done


--
Brugmans Frédéric

[linux.brugmans.net]
[techno-geek.brugmans.net]



Nom du forum : (antispam) - (en développement:saisir un texte pour le message, rempli cette zone automatiquement)
Votre nom: 
Votre email: 
Sujet: 

 
Ce forum est boosté par Phorum.