Rekursives Verzeichniss kopieren



  • Seit kurzem probiere ich einen Ordner inklusive aller Unterordner und enthaltenen Dateien an ein angegebens Verzeichniss meiner Wahl zu kopieren.
    (Ziel ist es also meinen eigenen copy Befehl unter c zu schreiben OHNE den vorhandenen von Unix zu benutzen)
    Dabei verwende ich c unter unix und NICHT c++ .

    Bislang läuft es noch nicht so wie geplant, hat vielleicht jemand eine Anregung oder einen Beispiel Quellcode für mich ??

    Wäre über jede Hilfe SEHR dankbar.

    Vielen Dank im Voraus und mit freundlichen Grüßen
    Sunny



  • Am besten du hältst dich ans Orginal -> http://www.gnu.org/software/coreutils/ das ist in C und soweit ich weiss auch rekrusiv nur ein wenig lang ist der Code 😉

    Ansonsten kannst du natürlich auch erst mal das posten was du schon hast und was nicht so richtig läuft, vielleicht kann man ja was draus machen 🕶

    Joe



  • Guck Dir mal die Funktion unten an, die macht nichts anderes als rekursiv alle Unterverzeichnisse durchzumaschieren und dabei aufzupassen das es nicht einen Link folgt und somit ganz woanders landet als ursprünglich.

    void baum_abstieg(char *pfad)
    {
      DIR *dir,*test_dir;
      struct dirent *dir_info;
      struct stat attribut;
      char isdir[MAXLAEN];
      char islink[MAXLAEN];
    
      if(chdir(pfad)!=-1)
      {
        dir=opendir(pfad);
        while((dir_info=readdir(dir))!= NULL)
        {
          if(stat(dir_info->d_name,&attribut)!=-1 && strcmp(dir_info->d_name,"..")!=0
                                                   && strcmp(dir_info->d_name,".")!=0)
            if((attribut.st_mode & S_IFDIR) && readlink(dir_info->d_name,islink,MAXLAEN)==-1)
            {
              if((test_dir=opendir(dir_info->d_name))!=NULL)
              {
                closedir(test_dir);
                getcwd(isdir,MAXLAEN);
                if(strcmp(pfad,"/")!=0)
                 strcat(isdir,"/");
                strcat(isdir,dir_info->d_name);
                if(in_list(isdir)!=0)
                {
                   fprintf(stderr,"Fehler beim einfügen von %s in Liste\n",isdir);
                   exit(1);
                }
                baum_abstieg(isdir);
              }
            }
        } /* end while */
        closedir(dir);
        chdir("..");
      }
    }
    


  • Hi,

    kleiner FAQ-Artikel 😉
    Bewegen in Verzeichnissen unter Unix

    hier eine sehr schoene Loesung von Hume, in C++:
    http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=dirlist#Answ

    mfg
    v R



  • Hi Leute

    Danke für die Hilfen,
    Programm läuft nun einwandfrei.

    Gruß
    Sunny


Anmelden zum Antworten