it-swarm.com.de

alle Dateien in einem Ordner in einen anderen verschieben?

beim Verschieben einer Datei von einem Ort zu einem anderen benutze ich

rename('path/filename', 'newpath/filename');

wie verschieben Sie alle Dateien in einem Ordner in einen anderen Ordner? versuchte es ohne Ergebnis:

rename('path/*', 'newpath/*');
26
ajsie

Eine etwas verbale Lösung:

// Get array of all source files
$files = scandir("source");
// Identify directories
$source = "source/";
$destination = "destination/";
// Cycle through all source files
foreach ($files as $file) {
  if (in_array($file, array(".",".."))) continue;
  // If we copied this successfully, mark it for deletion
  if (copy($source.$file, $destination.$file)) {
    $delete[] = $source.$file;
  }
}
// Delete all successfully-copied files
foreach ($delete as $file) {
  unlink($file);
}
53
Sampson

Eine Alternative, die rename () verwendet und einige Fehler überprüft:

$srcDir = 'dir1';
$destDir = 'dir2';

if (file_exists($destDir)) {
  if (is_dir($destDir)) {
    if (is_writable($destDir)) {
      if ($handle = opendir($srcDir)) {
        while (false !== ($file = readdir($handle))) {
          if (is_file($srcDir . '/' . $file)) {
            rename($srcDir . '/' . $file, $destDir . '/' . $file);
          }
        }
        closedir($handle);
      } else {
        echo "$srcDir could not be opened.\n";
      }
    } else {
      echo "$destDir is not writable!\n";
    }
  } else {
    echo "$destDir is not a directory!\n";
  }
} else {
  echo "$destDir does not exist\n";
}
15
GreenMatt

Bitte probieren Sie diese Lösung aus, sie wurde erfolgreich getestet: 

<?php
  $files = scandir("f1");
  $oldfolder = "f1/";
  $newfolder = "f2/";
  foreach($files as $fname) {
      if($fname != '.' && $fname != '..') {
          rename($oldfolder.$fname, $newfolder.$fname);
      }
  }
?>
12
Lakhan

Verschieben oder kopieren Sie die Art und Weise, wie ich es benutze

function copyfiles($source_folder, $target_folder, $move=false) {
    $source_folder=trim($source_folder, '/').'/';
    $target_folder=trim($target_folder, '/').'/';
    $files = scandir($source_folder);
    foreach($files as $file) {
        if($file != '.' && $file != '..') {
            if ($move) {
                rename($source_folder.$file, $target_folder.$file);
            } else {
                copy($source_folder.$file, $target_folder.$file);
            }
        }
    }   
}

function movefiles($source_folder, $target_folder) {
    copyfiles($source_folder, $target_folder, $move=true);
}
1
Juergen

versuchte es hier:

     <?php

     $oldfolderpath = "old/folder";
     $newfolderpath = "new/folder";

     rename($oldfolderpath,$newfolderpath);
     ?>
1
T.Todua

Also habe ich versucht, die Funktion rename() wie beschrieben zu verwenden, und ich habe immer wieder die Fehlermeldung erhalten, dass no such file or directory vorhanden war. Ich habe den Code in eine if-else-Anweisung eingefügt, um sicherzustellen, dass die Verzeichnisse wirklich erstellt wurden. Es sah so aus:

$tempDir = '/home/site/images/tmp/';
$permanentDir = '/home/site/images/' . $claimid; // this was stored above
mkdir($permanentDir,0775);
if(is_dir($permanentDir)){
    echo $permanentDir . ' is a directory';
    if(is_dir($tempDir)){
        echo $tempDir . ' is a directory';
    }else{
        echo $tempDir . ' is not a directory';
    }
}else{
    echo $permanentDir . ' is not a directory';
}

rename($tempDir . "*", $permanentDir);

Als ich den Code erneut lief, spuckte es aus, dass beide Pfade Verzeichnisse waren. Ich war verblüfft Ich sprach mit einem Kollegen und er schlug vor: "Warum benennen Sie das temporäre Verzeichnis nicht einfach in das neue Verzeichnis um, da Sie alle Dateien trotzdem verschieben möchten?"

Es stellte sich heraus, dass ich das letztendlich getan habe. Ich gab den Versuch auf, den Platzhalter mit der Funktion rename() zu verwenden, und benutze stattdessen einfach die Funktion rename(), um das temporäre Verzeichnis in das permanente umzubenennen.

so sieht es so aus.

$tempDir = '/home/site/images/tmp/';
$permanentDir = '/home/site/images/' . $claimid; // this was stored above
mkdir($permanentDir,0775);

rename($tempDir, $permanentDir);

Dies funktionierte wunderbar für meine Zwecke, da ich nicht das alte tmp-Verzeichnis brauche, um dort zu bleiben, nachdem die Dateien hochgeladen und "verschoben" wurden.

Hoffe das hilft. Wenn jemand weiß, warum der Platzhalter in der Funktion rename() nicht funktioniert und warum ich den oben genannten Fehler erhalten habe, lassen Sie es mich wissen.

1
paviktherin

Ich bin mir nicht sicher, ob das jemandem hilft oder nicht, aber ich dachte, ich würde trotzdem einen Beitrag schreiben. Hatte eine Herausforderung, bei der ich jede Menge Filme hatte, die ich über verschiedene Online-Shops gekauft und heruntergeladen hatte, die alle in einem Ordner gespeichert waren, aber alle in ihren eigenen Unterordnern und alle mit unterschiedlichen Namenskonventionen. Ich wollte alle in den übergeordneten Ordner verschieben und sie alle umbenennen, um hübsch auszusehen. Alle Unterordner, die ich mit einem Massenumbenennungstool und der bedingten Namensformatierung umbenennen konnte. Die Unterordner enthielten andere Dateien, die ich nicht wollte. So schrieb ich das folgende PHP-Skript: 1. Umbenennen/Verschieben Sie alle Dateien mit der Erweiterung mp4 in ihr übergeordnetes Verzeichnis, und geben Sie ihnen den gleichen Namen wie ihren Ordner. 2. Löschen Sie den Inhalt der Unterordner und suchen Sie nach leeren Verzeichnissen rmdir, 3. rmdir die Unterordner.

$handle = opendir("D:/Movies/");
while ($file = readdir($handle)) {
if ($file != "." && $file != ".." && is_dir($file)) {
    $newhandle = opendir("D:/Movies/".$file);
    while($newfile = readdir($newhandle)) {
        if ($newfile != "." && $newfile != ".." && is_file("D:/Movies/".$file."/".$newfile)) {
            $parts = explode(".",$newfile);
            if (end($parts) == "mp4") {
                if (!file_exists("D:/Movies/".$file.".mp4")) {
                    rename("D:/Movies/".$file."/".$newfile,"D:/Movies/".$file.".mp4");
                }
                else {
                    unlink("D:/Movies/".$file."/".$newfile);
                }
            }
            else { unlink("D:/Movies/".$file."/".$newfile); }
        }
        else if ($newfile != "." && $newfile != ".." && is_dir("D:/Movies/".$file."/".$newfile)) {
            $dirhandle = opendir("D:/Movies/".$file."/".$newfile);
            while ($dirfile = readdir($dirhandle)){
                if ($dirfile != "." && $dirfile != ".."){
                    unlink("D:/Movies/".$file."/".$newfile."/".$dirfile);
                }
            }
            rmdir("D:/Movies/".$file."/".$newfile);
        }
    }
    unlink("D:/Movies/".$file);
}
}
0
senya

versuchen Sie folgendes: Umbenennen ('Pfad/*', 'Newpath /');

Ich sehe keinen Punkt darin, ein Sternchen im Ziel zu haben

0
Aadith

Wenn das Zielverzeichnis nicht vorhanden ist, müssen Sie es zuerst erstellen:

mkdir('newpath');
rename('path/*', 'newpath/');
0
Adam Hopkinson

Als Anmerkung; Wenn Sie Dateien in einen anderen Ordner kopieren, wird der zuletzt geänderte Zeitpunkt zum aktuellen Zeitstempel. Sie sollten also berühren () die neuen Dateien.

... (some codes for directory looping) ...
if (copy($source.$file, $destination.$file)) {
   $delete[] = $source.$file;

   $filetimestamp = filemtime($source.$file); 
   touch($destination.$file,$filetimestamp);
}
... (some codes) ...
0
trante