Rolf B: Songs neu nummerieren (php)

Beitrag lesen

Hallo Jörg,

Dann würde aber die Reihenfolge nicht beibehalten.

Du würdest sie nicht in dieser Reihenfolge umbenennen, aber am Ende würden sie schon die richtige Reihenfolge haben.

Da fällt mir ein: Die Frage wäre noch, ob Du sowas wie einen "directory sort" erreichen willst, der die Dateien im Ordner auch ohne expliziten Sortierstep in ihrer gewünschten Reihenfolge anzeigt. Solche Spielzeuge waren zu FAT Zeiten sehr beliebt, vor allem, um oft gebrauchte Dateien nach vorn zu holen. Dann musst Du ganz anders vorgehen, und dann ist auch die Frage, ob dein Filesystem sowas überhaupt zulässt. Wenn das nicht das Anliegen ist, reicht ein einfacher "rename in place", wie wir ihn bisher diskutieren.

Die Funktion "glob" liefert Dir, meine ich, keine definierte Reihenfolge. Du müsstest das erhaltene Array also noch sortieren. Bei opendir/readdir bekommst Du eh nur einzelne Dateien, da kannst Du - wenn nötig - gleich auf .mp3 filtern und musst dann auch nochmal sortieren.

Bei scandir kannst Du eine Reihenfolge angeben. Wenn die Dateien so benannt sind wie Du es im Beispiel geschrieben hast, bekommst Du dann die korrekte Ausgangsbasis, in einem Array. Bei unter 1000 Dateien ist das kein Thema.

readdir und scandir lesen das ganze Verzeichnis. Filtern auf relevante Dateien musst Du selbst. glob kann auf Dateinamen filtern, sogar mit Patterns:

$mp3Files = glob("/usr/musik/foo/[0-9][0-9][0-9]*.mp3");

$allFiles = glob("/usr/musik/foo/[0-9][0-9][0-9]*.{mp3,wav,ogg}", GLOB_BRACE);

glob mit GLOB_BRACE wirst Du nicht brauchen, wenn Du nur mp3 Dateien hast. Aber die Einschränkung auf Dateien, die mit 3 Ziffern beginnen, könnte nützlich sein.

Solange Du keine echten Namensduplikate hast, ist meine "böse Helene" irrelevant und Du kannst einfach durchrennen und die Namen umbauen. Entweder mit explode/implode, wie der Raketenscripter meinte, oder mit einem strpos/strspn/substr Gefummel, wie ich.

Umbenennen tust Du dann mit rename.

Rolf

--
sumpsi - posui - obstruxi