Avatar billede doomstone-dk- Nybegynder
03. maj 2004 - 17:34 Der er 19 kommentarer og
1 løsning

Et script der kan lave en kopi af en hel mappe med udermapper

Jeg står lige og mangler tt script der kan lave en kopi af en hel mappe med udermapper og filer.

Hvis jeg nu har en mappe som hedder images(og den indeholde 2 mappe som selv hver indeholde 2 mapper).
den mappe vil jeg gerne have kopiret ind i en anden mappe, kaldt "Backup" og istedet for at hede images skal den hedder images 2-2-04 eller noget i den stil.
Avatar billede coderdk Praktikant
03. maj 2004 - 17:40 #1
kan du ikke bruge exec('cp -R images backup'); ?
Avatar billede coderdk Praktikant
03. maj 2004 - 17:41 #2
erh det ville så være:

exec('cp -R images backup/images-' . date('d-m-Y'));
Avatar billede doomstone-dk- Nybegynder
03. maj 2004 - 17:44 #3
Jeg køre windows.
så burte det være exec('xcopy /E images backup/images-' . date('d-m-Y'));
Men jeg ville helt have det i et script :)
Avatar billede doomstone-dk- Nybegynder
04. maj 2004 - 15:33 #4
Er der ikke nogle andre der har et lille fix script?
coderdk kan du ikke skrive noget som et svar så du kan få nogle point hvis der ikke er andre der svare?
Avatar billede coderdk Praktikant
05. maj 2004 - 11:00 #5
Jo her :)

Du kan vel bruge noget i stil med:

<?

    $kilde = '/sti/images';
    $backupsti = '/sti/backup/images-' . date("d-m-Y");
    mkdir( $backupsti );

    backupDir('');

    function backupDir($sti)
    {
        global $kilde, $backupsti;
        $dh = opendir( $kilde . '/' . $sti );
        if ( $sti != '' )
        {
            mkdir( $backupsti . '/' . $sti );
        }
        while ( $file = readdir( $dh ) )
        {
            if ( is_dir( $file ) )
            {
                doDir( $sti . '/' . $file );
            }
            else
            {
                copy( $kilde . '/' . $sti . '/' . $file, $backupsti . '/' . $file );
            }
        }
        closedir( $dh );
    }

?>

Det er *ikke* testet, men princippet skulle da være ok ;)
Avatar billede coderdk Praktikant
05. maj 2004 - 11:00 #6
doDir( $sti . '/' . $file );
skulle være:
backupDir( $sti . '/' . $file );
Avatar billede coderdk Praktikant
05. maj 2004 - 11:01 #7
Hmm

if ( is_dir( $file ) )

skulle nok være:

if ( is_dir( $file ) && $file != '.' && $file != '..' )
Avatar billede doomstone-dk- Nybegynder
06. maj 2004 - 17:38 #8
den siger:
Warning: copy(images/Skole): failed to open stream: Permission denied in c:\html\test\index.php on line 28

Og mappen images/skole er moded "777" hvad kan fejlen så være?
Avatar billede coderdk Praktikant
06. maj 2004 - 20:24 #9
Det inde i while løkken skal se sådan ud:

            if ( is_dir( $file ) && $file != '.' && $file != '..' )
            {
                doDir( $sti . '/' . $file );
            }
            elseif ( $file != '.' && $file != '..' )
            {
                copy( $kilde . '/' . $sti . '/' . $file, $backupsti . '/' . $file );
            }

Du bør nok skrive den fulde sti. Og den burde køre copy("/fuld/sti/images/Skole/fil","/fuld/sti/backup/images/Skole/fil") ikke blot copy(images/Skole) - hvis "Skole" da er et bibliotek...

Du kører windows? Skal stierne så ikke være med \ (eller \\) ? Kan man mode 777 i windows?
Avatar billede doomstone-dk- Nybegynder
06. maj 2004 - 21:34 #10
<?

    $kilde = 'c:\\html\\test\\images';
    $backupsti = 'c:\\html\\test\\backup\\images-' . date("d-m-Y");
    mkdir( $backupsti );

    function backupDir($sti)
    {
        global $kilde, $backupsti;
        $dh = opendir( $kilde . '\\' . $sti );
        if ( $sti != '' )
        {
            mkdir( $backupsti . '\\' . $sti );
        }
        while ( $file = readdir( $dh ) )
        {
            if ( is_dir( $file ) && $file != '.' && $file != '..' )
            {
                backupDir( $sti . '\\' . $file );
            }
            elseif($file != '.' && $file != '..')
            {
                if($sti){
                    $_sti = $kilde.'\\'.$sti.'\\'.$file;
                }else{
                    $_sti = $kilde.'\\'.$file;
                }
                copy($_sti, $backupsti.'\\'.$file);
                echo $_sti." -- ".$backupsti.'\\'.$file."  <br>\n";
            }
        }
        closedir( $dh );
    }

    backupDir('');

?>


giver

Warning: mkdir(c:\html\test\backup\images-06-05-2004): No such file or directory in c:\html\test\index.php on line 5

Warning: copy(c:\html\test\images\Skole): failed to open stream: Permission denied in c:\html\test\index.php on line 28
c:\html\test\images\Skole -- c:\html\test\backup\images-06-05-2004\Skole

Warning: copy(c:\html\test\images\03x.dk): failed to open stream: Permission denied in c:\html\test\index.php on line 28
c:\html\test\images\03x.dk -- c:\html\test\backup\images-06-05-2004\03x.dk

Warning: copy(c:\html\test\images\Andet): failed to open stream: Permission denied in c:\html\test\index.php on line 28
c:\html\test\images\Andet -- c:\html\test\backup\images-06-05-2004\Andet

Warning: copy(c:\html\test\images\Fag): failed to open stream: Permission denied in c:\html\test\index.php on line 28
c:\html\test\images\Fag -- c:\html\test\backup\images-06-05-2004\Fag
Avatar billede coderdk Praktikant
06. maj 2004 - 21:38 #11
c:\html\test\backup _skal_ findes i forvejen inden du kører scriptet.

Resten lader blot til at du skal sætte dine rettigheder korrekt.
Avatar billede coderdk Praktikant
06. maj 2004 - 21:42 #12
Ændr lige:

elseif($file != '.' && $file != '..')

til:

elseif (is_file($file) && $file != '.' && $file != '..' )
Avatar billede doomstone-dk- Nybegynder
06. maj 2004 - 22:16 #13
hjælpe ikke
Avatar billede doomstone-dk- Nybegynder
06. maj 2004 - 22:24 #14
is_dir($file) skal være is_dir($sti.'/'.$file) men virker stadig ikke!
Avatar billede doomstone-dk- Nybegynder
06. maj 2004 - 22:29 #15
Har lavet den om til
<?

    $kilde = 'c:\\html\\test\\images';
    $backupsti = 'c:\\html\\test\\backup\\images-' . date("d-m-Y");
    rmdir( $backupsti );
    mkdir( $backupsti );

    function backupDir($sti)
    {
        global $kilde, $backupsti, $file;
        $dh = opendir( $kilde . '\\' . $sti );
        if ( $sti != '' )
        {
            mkdir( $backupsti . '\\' . $sti );
        }
   
        while ( $file = readdir( $dh ) )
        {
            echo is_dir($kilde.'\\'.$file)." <-> $kilde\\$file<br>";
            if (is_dir($kilde.'\\'.$file) && $file != '.' && $file != '..')
            {
                backupDir($sti . '\\' . $file);
            }
            elseif (is_file($kilde.'\\'.$file) && $file != '.' && $file != '..')
            {
                echo " <-> det er en fil<br>\n";
                if($sti){
                    $_sti = $kilde.'\\'.$sti.'\\'.$file;
                }else{
                    $_sti = $kilde.'\\'.$file;
                }
                copy($_sti, $backupsti.'\\'.$file);
                echo $_sti." -- ".$backupsti.'\\'.$file."  <br>\n";
            }
        }
        closedir( $dh );
    }

    backupDir('');

?>

men nu laver den kun de første mapper! og ikke deres under mapper!
Avatar billede coderdk Praktikant
06. maj 2004 - 22:35 #16
Så skal du nok droppe $kilde i funktionen, hvis du forstår, og kun køre med $sti - også kalde den med $kilde til at starte med ;)
Avatar billede coderdk Praktikant
06. maj 2004 - 22:37 #17
Det er derfor den gør det jo... Når den finder biblioteker kalder den sig selv her:  backupDir($sti . '\\' . $file);
Avatar billede doomstone-dk- Nybegynder
06. maj 2004 - 22:47 #18
Hmm det forstpd jeg desvære ikke så meget af :(

Jeg er først til bage i morgen!
Avatar billede coderdk Praktikant
06. maj 2004 - 23:51 #19
Noget i stil med:

<?

    $kilde = 'c:\\html\\test\\images';
    $backupsti = 'c:\\html\\test\\backup\\images-' . date("d-m-Y");
    rmdir( $backupsti );
    mkdir( $backupsti );

    function backupDir($sti)
    {
        global $kilde, $backupsti, $file;
        $dh = opendir( $sti );
        $bckup = $backupsti . '\\' . substr($sti,strlen($kilde));
        if ( !file_exists( $bckup ) )
        {
            mkdir( $bckup );
        }
 
        while ( $file = readdir( $dh ) )
        {
            echo is_dir($sti.'\\'.$file)." <-> $sti\\$file<br>";
            if (is_dir($sti.'\\'.$file) && $file != '.' && $file != '..')
            {
                backupDir($sti . '\\' . $file);
            }
            elseif (is_file($sti.'\\'.$file) && $file != '.' && $file != '..')
            {
                echo " <-> det er en fil<br>\n";
                $_sti = $sti.'\\'.$file;
                copy($_sti, $bckup.'\\'.$file);
                echo $_sti." -- ".$bckup.'\\'.$file."  <br>\n";
            }
        }
        closedir( $dh );
    }

    backupDir($kilde);

?>
Avatar billede doomstone-dk- Nybegynder
07. maj 2004 - 13:15 #20
Så virker det sq
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester