Gestion fichiers sous unix
jossly
-
batmat Messages postés 1880 Date d'inscription Statut Membre -
batmat Messages postés 1880 Date d'inscription Statut Membre -
bonjour à tout le monde.
j'essaye de creer un script sous avec les commandes du c-shell unix pour visionner sur ecran tous les fichiers contenus dans mon reperoire et ses sous repertoires . mais le script m'affiche les fichiers de mon repertoire et pas ceux de ses sous repertoire. Qui peut me donner une idée ?
voici le script :
if ( ! -d $argv[1]) then
echo le parametre doit etre un repertoire
exit (0)
else if ( -d $argv[1]) then
cd $argv[1]
set tab=(`\ls -iR `)
set indice=2
while ($indice <= $#tab)
# parcour de tab qui conient le resultat de `ls -iR`
if ( -f $tab[$indice]) then
# on affiche le inoeud et le fichier correspondant
echo $tab[$indice-1] $tab[$indice]
else if ( -d $tab[$indice]) then
echo repertoire: $tab[$indice]
endif
@ indice++
end
endif
il ya une erreur mais je ne sais pas à quel endroit.
Merci de votre réaction.
jossly
j'essaye de creer un script sous avec les commandes du c-shell unix pour visionner sur ecran tous les fichiers contenus dans mon reperoire et ses sous repertoires . mais le script m'affiche les fichiers de mon repertoire et pas ceux de ses sous repertoire. Qui peut me donner une idée ?
voici le script :
if ( ! -d $argv[1]) then
echo le parametre doit etre un repertoire
exit (0)
else if ( -d $argv[1]) then
cd $argv[1]
set tab=(`\ls -iR `)
set indice=2
while ($indice <= $#tab)
# parcour de tab qui conient le resultat de `ls -iR`
if ( -f $tab[$indice]) then
# on affiche le inoeud et le fichier correspondant
echo $tab[$indice-1] $tab[$indice]
else if ( -d $tab[$indice]) then
echo repertoire: $tab[$indice]
endif
@ indice++
end
endif
il ya une erreur mais je ne sais pas à quel endroit.
Merci de votre réaction.
jossly
8 réponses
-
Je dis peut etre une connerie, mais pourquoi un script et pas un simple:
ls -R
?
. .
\_/ -
tu dois peut etre utiliser une fonction récursive pour parcourir l'ensemble des sous répertoires
-
je peux dire une connerie ? :o)
manquerais pas des accollades pour le while dés fois ?
ou alors un endif vu que c'est un esle if et non un elif ?
++
Na kaer eo va Breizh,
gand ar mor glaz èn-dro dezi ! -
mouais ...
Je viens de tester le script...
ca ne marche pas pour la meme raison que tu a mis ton indice a 2 :)
dans la sortie de ls -iR tu a:
0 .:
1 total 1254
2 fichier...
3 fichier...
4 fichier...
5 rep machin...
6
7 ./machin:
8 total 5234
...
sans les numeros de lignes :)
au changement de repertoire tu a 3 ligne qui ne colle pas avec ton prog :o) (ici 6 7 8)
essaye de traiter la sortie avec sed ou awk avant de la mettre dans tab :)
Na kaer eo va Breizh,
gand ar mor glaz èn-dro dezi ! -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Sorry,
deux lignes seulement puis que c'est ls et non ls -l :-P
Na kaer eo va Breizh,
gand ar mor glaz èn-dro dezi ! -
Le problème est que dans le script qd tu teste un dir. "if ( -d "$tab[$indice]")" tu reste ds le dir. courant donc qd tu testes le fichier suivant "if ( -f "$tab[$indice]") then" retourne faux car ce fichier est ds un sous-dir. OK?
Une solution est de ce déplacer ds les sous-dir. mais tab doit alors contenir les ".." pour pouvoir remonter.-
le déplacement dans les sou-s rep, se devrais se faire recurssivement dans `ls -iR`, à mon avis, et l'indoce commence à deux porce que le nom du premier fichier rencotré doit se trouver en position 2 et son inoeud en postion 1. Peut être je me trompe.
Qu'en penses vous?
Mercie de votre réaction.
Jossly
-
-
Est-ce que tu as un message d'erreur quelquonque ? si oui que dit-il ?
Est tu sur que la sortie de ton ls -iR ne renvoie aucune ligne blanche ?
(teste sur une console ls -1iR )
@++
Na kaer eo va Breizh,
gand ar mor glaz èn-dro dezi ! -
Moi je ferais pas comme ça...
Je commencerais par un "find ." qui te donnera tous les fichiers ... Ensuite, c'est facile de faire un ls -l sur chacun,
un tr -s ' ' pour simplifier les espaces
un cut -d' ' -f"le numéro du champ inode"
Etc.
Ca me parait beaucoup plus rapide et simple
@++
Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ?