Verzeichnis durchsuchen, unter LINUX



  • Hallo,

    ich suche eine Funktion/Methode mit der ich ein Verzeichnis nach bestimmten Files (xxxxxx.log) durchsuchen kann (die auch unter LINUX funktioniert). Die möchte ich dann in ein Array schreiben

    Vielen Dank

    Gruß
    Navigato



  • find /pfad/zum/verzeichnis -iname '*.log'

    Das oben würde Dir die log-Files mit der Endung .log auswerfen.
    neben find gibt es noch die Möglichkeit mit updatedb (als root) eine Datenbank aller auf dem System befindlichen Datein anzulegen und dann mit *locate .log nach z.B. log-Files zu suchen. Ich selbst verwende aber nur die erste Methode, da die immer aktuell sucht und Du nicht auf die Datenbank angeweisen bist, die halt veraltet sein kann.



  • Navigato schrieb:

    Hallo,

    ich suche eine Funktion/Methode mit der ich ein Verzeichnis nach bestimmten Files (xxxxxx.log) durchsuchen kann (die auch unter LINUX funktioniert). Die möchte ich dann in ein Array schreiben

    Es ist nicht ganz klar, wofür du das brauchst und für welche Platformen. Für C++ gibt es mehrere Wrapper um Filesysteme herum, wie zum Beispiel QDir/QFile in Qt und Boost filesystem.



  • upps

    ich brauchte es für C/C++

    aber ichhabe schon was gefunden 🙂

    if( (log_File = _findfirst( "*.log", &c_file )) == -1L )
           printf( "No *.log files in current directory!\n" );
    	else
    	{
    
    			while( _findnext( log_File, &c_file ) == 0 )
                {	
    				strcpy(file[i].filename,c_file.name);
    				i++;
                }
    
           _findclose( log_File );
    	}
    


  • Guten Tag,

    tut mir leid, aber ich kenne keine ⚠ Funktionen mit führenden Unterstrichen unter Linux (nur unter Borland C++;)). Kompilierst Du unter Linux ( und mit welchem Compiler)?

    Mit freundlichen Grüßen

    Linuxfreak



  • Du kannst man: readdir(3) benutzen

    hier ein kleines Bsp:

    void add_files(TREE* tree, const char* dir, int* id, int root, INFO* info)
    {
        DIR* directory; /* wichtig */
        struct dirent* dirInfo; /* wichtig */
        char buffer[MAX_LENGTH], text[MAX_LENGTH], curr[MAX_LENGTH]; /* wichtig */
        int i;
    
        if (!tree || !dir || !id) return;
    
        buffer[0]=0;
        for(i=0; i<root; ++i)
           strcat(buffer, " ");
    
        sprintf(text, "%s", dir);
        strcat(buffer, text);
        dfprintf(output, buffer);
        if (NULL==(directory=opendir(dir))) { /* wichtig */
           dfprintf(output, " (cannot be opened)\n");
           return;
        }
        dfprintf(output, " (opened)\n");
        buffer[0]=0;
        for(i=0; i<root+2; ++i)
           strcat(buffer, " ");
    
        while ((dirInfo = readdir(directory)) != NULL) { /* wichtig */
            // 4 is directory, 8 is file
            if(strcmp(dirInfo->d_name, ".") && strcmp(dirInfo->d_name, "..") && strcmp(dirInfo->d_name, ".xvpics")) { /* wichtig */
                /* .xvpics for The GIMP */
                if (dirInfo->d_type==4) { /* wichtig */
                    strcpy(curr, dir);
                    if (curr[strlen(curr)-1]!='/') strcat(curr, "/");
                    strcat(curr, dirInfo->d_name);
                    add_files(tree, curr, id, root+2, info);
                }
                else {
                    if (isPicture(dirInfo->d_name, info)) {
                        strcpy(curr, dir);
                        if (curr[strlen(curr)-1]!='/') strcat(curr, "/");
                        strcat(curr, dirInfo->d_name);
                        if (!haveName(tree, curr)) {
                            if (addElement(tree, curr, ++(*id))) 
                                dfprintf(output, "%s%s (added)\n", buffer, curr);
                            else --(*id);
                        }
                    }
                }
            }
        }
        closedir(directory);
    }
    

    wobei die wichtige Zeilen mit /* wichtig */ markiert sind. (Ich war ein bisschen zu faul den uninteressanten Code zu entfernen :))



  • Im uebrigen haettest du auch mal in die FAQ schauen koennen 😉

    mfg
    v R


Anmelden zum Antworten