Gestion fichiers sous unix

Fermé
jossly - 18 juil. 2003 à 13:23
batmat
Messages postés
1871
Date d'inscription
jeudi 1 novembre 2001
Statut
Membre
Dernière intervention
9 janvier 2008
- 19 juil. 2003 à 20:29
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

8 réponses

teebo
Messages postés
33478
Date d'inscription
jeudi 14 octobre 2004
Statut
Modérateur
Dernière intervention
24 février 2011
1 796
18 juil. 2003 à 13:34
Je dis peut etre une connerie, mais pourquoi un script et pas un simple:

ls -R

?

.  .
\_/
0
voila, en fait je la finalité du script est que apres je devrai effacer les fichiers synonymes dans tout l'arborecsence du repertoire. c'est -à -dire ceux qui ont le meme numero de inoeud. c'est pourqoi, je tente d'abord d'isoler les fichiers leguliers et leur inoeud en utilisant la commande ls ...
0
tu dois peut etre utiliser une fonction récursive pour parcourir l'ensemble des sous répertoires
0
je l'ai utilise justement dans la commande
set tab= (`ls -iR`)
la variable tab stocke un tableau de tout les fichiers et repertoires avec leur inoeud correspondants, je suppose. je pense. Mais la boucle de while n'entre pas dans les sour repertoire .

Jossly
0
asevere
Messages postés
13089
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
3 février 2022
422
18 juil. 2003 à 14:00
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 !
0
non, pour le while, il n' y a pas d'accolade j'ai vérifié et pour le if c'est bon aussi les endif sont bien placés aussi

Merci
jossly
0
j'ai besoin de vos idée, reagissez s'il vous plais.

Jossly
0
asevere
Messages postés
13089
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
3 février 2022
422
18 juil. 2003 à 14:41
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 !
0
je mets l'indice à 2 pour reperer le nom du fichier, car en position 1 cest son inoeud Et position 0 c'est le nom de tab.

si vous avez d'atres idées merci de me les donner.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
asevere
Messages postés
13089
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
3 février 2022
422
18 juil. 2003 à 15:00
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 !
0
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.
0
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
0
asevere
Messages postés
13089
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
3 février 2022
422
19 juil. 2003 à 19:28
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 !
0
batmat
Messages postés
1871
Date d'inscription
jeudi 1 novembre 2001
Statut
Membre
Dernière intervention
9 janvier 2008
114
19 juil. 2003 à 20:29
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 ?
0