Verzeichniss löschen
Netti
- webserver
Hallo,
dir zeigt mir u.a.
verz11
verz11\r\n
Wincommander zeigt mir diese beiden Verzeichnisse als
verz11
verz11
an.
$ rm -r verz11\r\n
verz11rn: No such file or directory
Und wie lösche ich das nun?
Lg, Netti
Zusatz:
$ rm -r verz11\r\n
verz11\r\n: No such file or directory
perl -Mautodie -e'rmdir "verz11\r\n"'
Oder im Midnight Commander (Befehl »mc«) den Eintrag markieren (Taste »Einfg«) und löschen (Taste »F8«).
perl -Mautodie -e'rmdir "verz11\r\n"'
Oder im Midnight Commander (Befehl »mc«) den Eintrag markieren (Taste »Einfg«) und löschen (Taste »F8«).
Tuts Beides leider nicht.
:-( Kjorni
Kann sich keiner einen Reim darauf machen, was hier auf "meinem Server passiert?"
Ich weiß jetzt wohl, woher das kommt (obwohl es vorher nie so war und ich nichts geändert habe zwischenzeitlich):
Ich habe ein Script, was mir Verzeichnisse und Dateien kopieren soll. Vorhandene Dateien (oder Verteichnisse) wurden dabei immer überschrieben.
Nun wird anstattdessen dieser komische \r\n-Ordner angelegt, obwohl das Script unverändert ist.
Hier die Funktion:
function copyFolder($source, $dest, &$statsCopyFolder, $recursive = TRUE)
{
if (!is_dir($dest))
{
mkdir($dest);
}
$handle = @opendir($source);
if(!$handle)
return false;
while ($file = @readdir ($handle))
{
if (eregi("^\.{1,2}$",$file))
{
continue;
}
if(!$recursive && $source != $source.$file."/")
{
if(is_dir($source.$file))
continue;
}
if(is_dir($source.$file))
{
copyFolder($source.$file."/", $dest.$file."/", $statsCopyFolder, $recursive);
}
else
{
copy($source.$file, $dest.$file);
echo($dest.$file."<br>");
$statsCopyFolder['files']++;
$statsCopyFolder['bytes'] += filesize($source.$file);
}
}
@closedir($handle);
} // end of function
Weiß denn gar keiner einen Rat, ich verzweifle hier grad :-((
Grüße, Kjorni
Mir ist es inzwischen gelungen, diese seltsamen \r\n-Ordner zu löschen:
<?php
function delete($file) {
chmod($file,0777);
if (is_dir($file)) {
$handle = opendir($file);
while($filename = readdir($handle)) {
if ($filename != '.' && $filename != '..') {
delete($file."/".$filename);
}
}
closedir($handle);
rmdir($file);
} else {
unlink($file);
}
}
delete("verz11\r\n");
echo("fertig");
?>
Aber kann mir mal jemand sagen, warum die überhaupt angelegt werden und weder einsehbar noch löschbar sind?
Was bedeutet das denn?
Grüße, Kjorni
Hallo,
Kann sich keiner einen Reim darauf machen, was hier auf "meinem Server passiert?"
es ist doch ganz einfach: "Jemand", also vermutlich irgendein Script, hat Verzeichnisse angelegt, in deren Namen Steuerzeichen vorkommen. Das sollte man zwar aus Gründen, die du inzwischen erlebt hast, vermeiden. Aber es ist nicht verboten.
function copyFolder($source, $dest, &$statsCopyFolder, $recursive = TRUE)
{
if (!is_dir($dest))
{
mkdir($dest);
}
Genau hier bekam das Script wohl in irgendeiner Situation ein $dest übergeben, das mit CRLF, also \r\n abgeschlossen war, und hat brav ein Verzeichnis mit diesem Namen angelegt. Mit einem einfachen
rmdir("verz\r\n");
hätte man es garantiert auch wieder löschen können (passende Zugriffsrechte vorausgesetzt).
Ciao,
Martin
Hi,
es ist doch ganz einfach:
Puuuuh, sowas les ich grad sehr gerne ;-)
Und tatsächlich, Du bringst Licht in die Sache.
Aber es ist nicht verboten.
Das wußte ich gar nicht.
Genau hier bekam das Script wohl in irgendeiner Situation ein $dest übergeben, das mit CRLF, also \r\n abgeschlossen war, und hat brav ein Verzeichnis mit diesem Namen angelegt.
Das kann wirklich sein, denn die Sdest kommen aus einer Datei, in dem in jeder Zeile ein $dest drin steht und arbeitet die in einer Schleife ab.
Sollte also für mich möglich sein, das CRLF aus dem $dest zu löschen. trim() macht das aber nicht, ne?
rmdir("verz\r\n");
hätte man es garantiert auch wieder löschen können (passende Zugriffsrechte vorausgesetzt).
Völlig korrekt, das stimmt.
Bleiben aber 2 Fragen offen:
Warum greift der ominöse \r\n-Ordner, wenn ich ihn öffne, auf den originalen Ordner zu? (Wobei, das müßte ich vor der Frage nochmal gegenchecken...kann sein, dass ich mich hier gerade irre.)
Warum macht das Script das erst heute und all die Monate zuvor noch nicht?
Ich habe weder Script noch Server gewechselt.
Erstmal vielen vielen Dank für die Hilfe!
Kjorni
Ciao,
Martin
Das kann wirklich sein, denn die Sdest kommen aus einer Datei, in dem in jeder Zeile ein $dest drin steht und arbeitet die in einer Schleife ab.
Sollte also für mich möglich sein, das CRLF aus dem $dest zu löschen. trim() macht das aber nicht, ne?
Ohne Kenntnis über die verwendete Programmiersprache dürfte eine Antwort schwer fallen.
Ich vermute du redest von Perl, dann solltest du dich mit chomp beschäftigen.
Struppi.
Ich vermute du redest von Perl, ...
falsch. Wohl eher PHP, da weiß ich nicht ob chomp existiert, aber du könntest ja suchen..
Struppi.
Ich vermute du redest von Perl, dann solltest du dich mit chomp beschäftigen.
Hi Struppi,
hach ja, chop und chomp kenne ich noch aus alten Perl-Tagen :-)
Gruß, Kjorni
Hallo,
es ist doch ganz einfach:
Puuuuh, sowas les ich grad sehr gerne ;-)
;-)
Genau hier bekam das Script wohl in irgendeiner Situation ein $dest übergeben, das mit CRLF, also \r\n abgeschlossen war, und hat brav ein Verzeichnis mit diesem Namen angelegt.
Das kann wirklich sein, denn die Sdest kommen aus einer Datei, in dem in jeder Zeile ein $dest drin steht und arbeitet die in einer Schleife ab.
Und liest die Datei vermutlich zeilenweise mit fgets(). Diese Funktion liefert eine Zeile aus der Datei *einschließlich* des abschließenden Zeilenumbruchs.
Sollte also für mich möglich sein, das CRLF aus dem $dest zu löschen. trim() macht das aber nicht, ne?
Schau ins Manual. Da steht's explizit beschrieben.
rmdir("verz\r\n");
hätte man es garantiert auch wieder löschen können (passende Zugriffsrechte vorausgesetzt).
Völlig korrekt, das stimmt.
Warum bist du nicht auf die Idee gekommen?
- Warum greift der ominöse \r\n-Ordner, wenn ich ihn öffne, auf den originalen Ordner zu? (Wobei, das müßte ich vor der Frage nochmal gegenchecken...kann sein, dass ich mich hier gerade irre.)
Wie greifst du darauf zu? Von einer Shell, die den abschließenden Zeilenumbruch ihrerseits als Ende der Befehlszeile betrachtet? Möglicherweise lässt sich der mc auch täuschen, indem er einfach davon ausgeht, dass Dateinamen keine Steuerzeichen enthalten.
- Warum macht das Script das erst heute und all die Monate zuvor noch nicht?
Gute Frage. Nächste Frage?
Ich habe weder Script noch Server gewechselt.
Aber vielleicht hat der Hoster irgendeine Einstellung verändert?
Ciao,
Martin
Hi Martin,
Und liest die Datei vermutlich zeilenweise mit fgets(). Diese Funktion liefert eine Zeile aus der Datei *einschließlich* des abschließenden Zeilenumbruchs.
Nein, ich lese sie über $array = file("./datei.txt"); // Datei in ein Array einlesen
Schau ins Manual. Da steht's explizit beschrieben.
Oh? trim macht das doch?
Warum bist du nicht auf die Idee gekommen?
Bin ich doch. Schau in mein 2. verzweiflungspost, da stehts drin.
Wie greifst du darauf zu? Von einer Shell, die den abschließenden Zeilenumbruch ihrerseits als Ende der Befehlszeile betrachtet? Möglicherweise lässt sich der mc auch täuschen, indem er einfach davon ausgeht, dass Dateinamen keine Steuerzeichen enthalten.
Über wincommander.
Aber vielleicht hat der Hoster irgendeine Einstellung verändert?
Hab ich auch schon drüber nachgedacht.
Jetzt läuft auf jeden Fall dank Deiner Hilfe weider alles so wie es soll.
Dankeschön, Kjorni
Hallo,
Schau ins Manual. Da steht's explizit beschrieben.
Oh? trim macht das doch?
tja, wer hätte das gedacht! :-)
Warum bist du nicht auf die Idee gekommen?
Bin ich doch. Schau in mein 2. verzweiflungspost, da stehts drin.
Stimmt, wer lesen kann ...
Hab ich übersehen.
Wie greifst du darauf zu? [...]
Über wincommander.
Aha, und dann über FTP? Dann ist es klar. Ein FTP-Client fordert vom Server eine Liste des Verzeichnisinhalts an. Die bekommt er in Textform, jede Zeile eine Datei. Wenn ein Dateiname seinerseits einen Zeilenumbruch enthält, "zerfällt" der Name in zwei Zeilen, die jeweils einen Teil des Namens enthalten.
Den Namen "verz\r\n" bekommt er dann als "verz" in einer Zeile und zusätzlich einem Leerstring in einer weiteren Zeile (die er vermutlich ignoriert).
Ciao,
Martin
Hi Martin,
Oh? trim macht das doch?
tja, wer hätte das gedacht! :-)
Aha, und dann über FTP? Dann ist es klar. Ein FTP-Client fordert vom Server eine Liste des Verzeichnisinhalts an. Die bekommt er in Textform, jede Zeile eine Datei.
Hach, ich bin schon wieder viel schlauer als noch heute morgen :-)
Und alles auf meinem Server läuft wieder wie gewohnt.
Guter Tag, danke für Deine Hilfe hierzu.
Gruß, Kjorni
Hi.
Betreff: Verzeichniss löschen
Und wie lösche ich das nun?
Vielleicht mit einer Läuseharke? ;)
Schönen Sonntag noch!
O'Brien