gcc -o rename rename.c
codice:rename.c #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <dirent.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #define DEFAULT_DIR_TO_SCAN "." #define CHR_TO_CHANGE ' ' #define CHR_CHANGED '_' char * stredit ( const char * s, char c1, char c2 ); int main ( int argc, char * argv [ ] ) { DIR * directory; struct dirent * fileInDir; int fd; char * dirname; char * newname; if ( argc > 2 ) { // FIXME: Devo poter scannare piu' dirs. printf ( "Troppi argomenti.\nUsage: %s [DIRECTORY]\n", argv[0] ); exit ( 1 ); } else if ( argc == 2 ) { dirname = argv[1]; } else { // argc == 1 dirname = DEFAULT_DIR_TO_SCAN; } directory = opendir ( dirname ); if ( directory == NULL ) { printf ( "Non posso fare un listato della directory \"%s\".\n" ); exit ( 1 ); } fd = dirfd ( directory ); chdir ( dirname ); while ( ( fileInDir = readdir ( directory ) ) != NULL ) { newname = stredit ( fileInDir->d_name, CHR_TO_CHANGE, CHR_CHANGED ); rename ( fileInDir->d_name, newname ); free ( newname ); } closedir ( directory ); return 0; } char * stredit ( const char * s, char c1, char c2 ) { int len = strlen(s); char * rs = (char *) malloc ( len + 1 ); int i; for ( i = 0; *(s+i); i ++ ) { if ( *(s+i) == c1 ) { *(rs+i) = c2; } else { *(rs+i) = *(s+i); } } *(rs+i+1) = '\0'; return rs; }

Rispondi quotando