Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
script de parcours récursif des répertoires
Envoyé par: HIL

Salut,

je voudrais parcourrir récursivement mes répertoires pour faire un traitement sur chaque fichier s'y trouvant, j'utilise un script bash pour ça mais j'ai un problème

#!/bin/sh

for i in *
do
if [ -d "$i" ]; then
`echo "$i"`
fi
done

normalement [-d "$i"] retourne 1 seulement si il s'agit d'un répertoire, pourtant il retourne 1 tout le temps.

Est ce que j'ai mal écrit mon test ?
Merci d'avance.

HIL

Poste le Sunday 16 November 2003 13:56:37
Répondre     Citer    
Re: script de parcours récursif des répertoires
Envoyé par: xinul

salut !

en fait il y a un probleme de syntaxe, il aurait fallu ecrire :


-------------------------------------------------------------------
#!/bin/sh

for i in *;
do
if [ -d "$i" ]; then
echo "$i"
fi
done
--------------------------------------------------------------------

voila en l'executant, normalement tu devrais voir s'afficher la liste de tes repertoires.
je l'ai teste comme ca, ca marche.

#%b

+++

Poste le Sunday 16 November 2003 20:11:04
Répondre     Citer    
Re: script de parcours récursif des répertoires
Envoyé par: coufan

euh oui, les commandes que tu peux lancer sur l'interpréteur de commandes (ton shell) sont... non voyons les choses autrement,
le contenu de ton script formalisé en une ligne doit marcher.
Car son contenu est le langage et les commandes du shell.
il n'est donc pas nécessaire de chercher à évaluer une commande shell comme echo en l'encapsulant entre deux quotes spéciales

Poste le Monday 17 November 2003 00:39:42
Répondre     Citer    
Re: script de parcours récursif des répertoires
Envoyé par: david fasani

#include <pwd.h>
#include <grp.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <dirent.h>
#include <sys/stat.h>
#include <sys/types.h>

/* effectue un ls dans rep */
void ls ( char * rep )
{
// descripteur de repertoire
DIR * nom_directorie ;

// structure d'une entree
struct dirent * fichier ;

// des infos sur le fichier courant
struct stat *infoFichier;

//pour manipuler la date du fichier
char date[64];

//pour manipuler le fichier courant
char repTemp[1024];

struct passwd * pw;
struct group * gr;

infoFichier = (struct stat *) malloc( sizeof(struct stat) );


// ourverture du repertoire
if ( (nom_directorie = opendir( rep ) )!=0 )
{
//Affichage du repertoire en cours de traitement
printf( "REPERTOIRE COURANT : %s\n" , rep );

// lectures des entrees
while ((fichier = readdir(nom_directorie)) != NULL)
{
// on evite les fichiers . et ..
if ( ( strcmp (fichier->d_name , "." ) == 0 ) || ( strcmp (fichier->d_name , ".." ) == 0 ) )
continue;

if ( (stat( fichier->d_name , infoFichier)) == 0)
{

pw = getpwuid( infoFichier->st_uid );
gr = getgrgid( pw->pw_gid );

printf("%lu\t" , infoFichier->st_nlink );

printf("%s\t" , pw->pw_name );

printf("%s\t" , gr->gr_name );

printf("%lu\t" , infoFichier->st_size );


ctime_r(&infoFichier->st_mtime , date );
date[19]='\0';

printf("%s" , date+4 );


printf("\t%s",fichier->d_name);

//si c'est un repertoire !
if( S_ISDIR( infoFichier->st_mode ) )
{
printf("/");

strcpy ( rep , repTemp );
strcat ( repTemp , "/" );
strcat ( repTemp , fichier->d_name );

printf( "appel du ls sur %s\n" , repTemp );

//appel recursif !
ls ( repTemp );

}
//on passe quand même à la ligne !
printf("\n");
}


}
closedir(nom_directorie);
}


}

int main ( int argc , char **argv )
{


// teste de bonne utilisation
if ( argc != 2 )
{
printf("usage : %s rep \n",argv[0]);
exit(1);
}

else ls( argv[1] );

}


hihihi !


Poste le Monday 17 November 2003 08:34:15
Répondre     Citer    
Re: script de parcours récursif des répertoires
Envoyé par: lechabin

Hello
David est un malin.
bon quel traitement tu veux faire .
parceque pour lister des fichiers rien de mieux qu'un find .
find / -name * va surement lister tout tes fichiers...........dc va parcourir tous tes repertoires.
apres tu fais ce que tu veux .
find / -name * -exec ....et puis la commande que tu veux ....
le C c'est bo.....

Poste le Monday 17 November 2003 15:51:08
Répondre     Citer    
Re: script de parcours récursif des répertoires
Envoyé par: HIL

Salut

oui au final, c'est ce que j'ai fait, j'y avais pas pensé sur le moment.
En réalité je veux resampler tous mon répertoire de mp3 en 128 pour gagner de la place avant de l'envoyer vers un ipod

en gros je vais écrire un truc comme ça:

#!/bin/sh

for m in `find . -name "*.mp3" ` ; do
        echo "Processing " "$m"
        t=`mktemp /tmp/mp3XXXXXX`
lame "$m" -b 128 $t
mv $t "$m"
rm -rf $t
done

Si je mets des " " autour de $m, c'est parce que j'ai remarqué que sinon les fichiers avec des espaces dans les noms ne passent pôs !!

Par contre c'est pas encore parfait, l'idéal aurait été de pouvoir vérifier que le mp3 a un bitrate supérieur à 128. Ca c'est pas super dur la commande `file fichier.mp3` me le donne, sauf que pour un bitrate variable de minimum 128, ça renvoit aussi 128 et ça c con.

alors si vous connaissez des commandes magiques smiling smiley

Et merci pour vos réponses.
HIL

Poste le Monday 17 November 2003 20:03:47
Répondre     Citer    
Re: script de parcours récursif des répertoires
Envoyé par: lechabin

le plus top ca aurait ete de la faire avec des threads......c pas diffcile.
parcontre je ne connais pas de commande pour ce que tu demandes et je doute que cela existe car ca impliquerait de tester tout le fichier mp3 et ca c pas top...
alors contente toi de ce que tu as .
Par contre....quelle idee de passer en 128 ...
vraiment le 128 c'est laid .....
avec mon Irivier je vois la difference....Et je prefere largement le 128
mais bon ..
sur ce .
bonsoir de la martinique

Poste le Tuesday 18 November 2003 01:10:28
Répondre     Citer    
Re: script de parcours récursif des répertoires
Envoyé par: alveric

mpginfo ?

Poste le Sunday 7 December 2003 20:24:27
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
script de parcours récursif des répertoires
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