Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Programmation shell et création de dossiers/fichiers
Envoyé par: Philippe Manin

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 ! smiling smiley

Poste le Saturday 24 March 2007 19:23:44
Répondre     Citer    
Re: Programmation shell et création de dossiers/fichiers

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

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

Projet logiciel libre: RefPerSys

Poste le Saturday 24 March 2007 19:44:59
Répondre     Citer    
Re: Programmation shell et création de dossiers/fichiers

Zut, la permission octale aurait dû être 0o640 pas 0o540 :-(

----

Basile STARYNKEVITCH

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

Projet logiciel libre: RefPerSys

Poste le Saturday 24 March 2007 19:46:04
Répondre     Citer    
Re: Programmation shell et création de dossiers/fichiers
Envoyé par: Philippe Manin

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

Poste le Saturday 24 March 2007 20:36:52
Répondre     Citer    
Re: Programmation shell et création de dossiers/fichiers
Envoyé par: twocats

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

Poste le Monday 26 March 2007 15:20:24
Répondre     Citer    
Re: Programmation shell et création de dossiers/fichiers

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

[www.brugmans.net]
[triathlon.sport-challenge.be]

Poste le Tuesday 27 March 2007 16:08:42
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Programmation shell et création de dossiers/fichiers
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.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons