Dateien und Ordner auf Webspace mittels Skript automatisch löschen?

Dedi

Dedi

Aktives Mitglied
Thread Starter
Dabei seit
28.09.2008
Beiträge
699
Reaktionspunkte
26
Hallo,

ich habe eine Webseite, die u.a. mit der opensource Bildergallerie gallery2 betrieben wird. Beim Update auf die neueste Version von gallery2 sind nun über 2500 veraltete Dateien auf meinem Webspace in zig verschiedenen Ordnern verblieben. Es wird zwar ein Skript angeboten, mit dem sich die Dateien automatisch löschen lassen. Nur leider kann ich bei meinem Hoster und dem von mir gewählten Webspace-Paket keine eigenen Skripte ausführen (lassen).

Daher meine Frage, ob ich mit der Liste der Dateien, die ich in dem Sript habe, ein Automator Skript erstellen kann, welches die alten Dateien und Verzeichnisse per FTP automatisch löscht. Ich würde diese Aufräumaktion schon gerne durchführen.

Wäre das möglich und wenn ja, wie stelle ich das an?

Die Befehlszeilen in dem Skript sehen alle so aus:
rm upgrade/templates/ManifestSystemCheck.html

Vielen Dank und Gruß,

Dedi
 
Ja, das geht, wenn auch wahrscheinlich nicht mit Automator sondern mit einem Shellscript. Ich gehe davon aus, dass "upgrade" ein Verzeichnis auf der obersten Ebene Deines FTP Servers ist; andernfalls müsstest Du Deine Datei entsprechend anpassen, was auch kein großes Problem ist.

Eine relativ einfacher Möglichkeit wäre es, folgende Schritte auszuführen.
  1. Du legst eine Datei ~/.netrc an, die die Zugangsdaten zu Deinem Server enthält. Das vereinfacht das Ganze ein wenig. Eine Anleitung zur netrc-Datei erhältst Du mit folgendem Kommando im Terminal "man ftp | less +2/netrc\ FILE" oder bei goole.
  2. Du führst folgende Schleife im Terminal aus:
    Code:
    for cmd in $(cat [I]/pfad/zur/sktriptdatei[/I])
    do
    echo $cmd | ftp [I]ftp.server.de[/I]
    done
Den Pfad zur Skriptdatei sowie den Namen des FTP Servers musst Du natürlich anpassen. Außerdem solltest Du aus der Skriptdatei ggf. alle Zeilen entfernen, die nicht Kommandos sind, die Du an den FTP Server schicken möchtest.

HTH
Gruß
maceis
 
Super, vielen Dank für die Antwort!

Ich brauche aber leider noch ein wenig mehr Hilfe.

  • wo lege ich die .netrc Datei an und wie mache ich das genau?
  • wie führe ich dann die Schleife aus, ist das wieder ein anderes Skript? und wenn ja, wie erstelle ich das?

Vielen Dank für die Hilfe!

Gruß, Dedi
 
Die .netrc Datei legst Du in Deinem Homeordner an. Sie ist dann im Finder unsichtbar.
Am einfachsten machst Du das so. Die folgenden Kommandos gibst Du einfach im Terminal (Programme > Dienstprogramme) ein.
Code:
echo "machine [COLOR="RoyalBlue"]ftp.server.de[/COLOR] login [COLOR="RoyalBlue"]benutzername[/COLOR] password [COLOR="RoyalBlue"]dein_passwort[/COLOR]" >> ~/.netrc
chmod 600 ~/.netrc
Die blauen Begriffe ersetzt Du passend.

Die Kommandos der Schleife gibst Du auch einfach nur im Terminal ein.
 
Du könntest das Skript auch in PHP umschreiben, und es dann ausführen. Aber Maceis Vorschlag ist viel schöner :)
 
Das sind doch Shell Skripe und kein PHP, oder verstehe ich das falsch?
 
Ich weiß nicht, was der Tarif von Dedi hergibt.
Ich weiß nur, dass PHP auch eine Skriptsprache ist.
Meine Methode funktioniert jedenfalls mit jedem halbwegs normalen FTP Server.
 
Du hast vollkommen Recht, ich wollte die Option nur noch in den Raum werfen, falls deine nicht klappen sollte.
 
Die .netrc Datei legst Du in Deinem Homeordner an. Sie ist dann im Finder unsichtbar.
Am einfachsten machst Du das so. Die folgenden Kommandos gibst Du einfach im Terminal (Programme > Dienstprogramme) ein.
Code:
echo "machine [COLOR="RoyalBlue"]ftp.server.de[/COLOR] login [COLOR="RoyalBlue"]benutzername[/COLOR] password [COLOR="RoyalBlue"]dein_passwort[/COLOR]" >> ~/.netrc
chmod 600 ~/.netrc
Die blauen Begriffe ersetzt Du passend.

Die Kommandos der Schleife gibst Du auch einfach nur im Terminal ein.

So, nachdem ich jetzt gelernt habe, dass das Passwort keine Sonderzeichen enthalten darf, habe ich immerhin schon mal die netrc Datei angelegt und mit den entsprechenden Rechten versehen. Gebe ich allerdings den Schleifen Befehl ein, bekomme ich eine Fehlermeldung (die Angaben in den "" lauten natürlich anders):

mein_imac:~ meinaccount$ for cmd in $(cat "Pfadangabe") do echo $cmd | ftp "ftpserver" done
-bash: syntax error near unexpected token `|'
mein_imac:~ meinaccount$
 
Du musst die Befehle in eine .sh oder .command Datei packen, sonst geht das nicht.

Entweder mit deinem Editor (Smultron, TextMate, skEdit, TextEdit geht auch im "Reinen Text Modus") und dann im Terminal
Code:
chmod +x dieDatei.sh
und dann
Code:
./dieDatei.sh
dann läuft das Skript.
 
Zuletzt bearbeitet:
Du musst die Befehle in eine .sh oder .command Datei packen, sonst geht das nicht.
...
Nein, das ist nicht richtig. Eine Schleife kann man ganz normal auf der Kommandozeile ausführen. Möglicherweise stimmen die Zeilenumbrüche nicht.
(verwende bitte die Code Tags zum Posten von Shellcode, sonst wird das unlesbar).

[noparse]
Code:
... (hier kommt der Code rein — zeilenweise)
[/noparse]


Wahrscheinlich ist es aber eher so, dass die Kommandos nicht korrekt sind bzw. unzulässige Zeichen enthalten.
Ersetze mal die Befehlszeile durch
Code:
echo $cmd
und poste ein paar davon.
 
Zuletzt bearbeitet:
ok, das funktioniert erstmal, aber...

Dennoch klappt es noch nicht. Pro Zeile aus meiner Löschliste gibt es diese Fehlermeldung. Wenn ich händisch über das Terminal per ftp auf meinen Webspace gehe, funktionieren die einzelnen Befehlszeilen (delete FILE).

Connected to ftpserver.de.
.... FTP server ready
ftp: Unknown .netrc keyword chmod
ftp: Unknown .netrc keyword 600
ftp: Unknown .netrc keyword /Users/dedi/.netrc
331 Password required for USER.
230 User USER logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
(remote-file)
EOF received; operation aborted.
221 Goodbye.
Connected to ftpserver.de.
... FTP server ready
ftp: Unknown .netrc keyword chmod
ftp: Unknown .netrc keyword 600
ftp: Unknown .netrc keyword /Users/dedi/.netrc
331 Password required for USER.
230 User USER logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
?Invalid command.
221 Goodbye.
 
Da ist vermutlich ein Hund in Deiner .netrc Datei.

Welche Ausgabe erhältst Du, wenn Du auf der Kommandozeile folgendes eingibst:
Code:
ftp ftpserver.de.
Kommst Du ohne Eingabe von Benutzername und Kennwort auf den Server?
Vermutlich nicht, also ist Deine .netrc Datei falsch.
Welche Ausgabe erhältst Du mit:
Code:
ls -l ~/.netrc
welche mit
Code:
cat ~/.netrc
(sensible Daten anonymisieren, aber nicht verstümmeln)
 
der Login per FTP klappt, nachdem ich einen Feheler in der netrc Datei eleminiert habe - danke für den Tip :)

mein-imac:~ LOGIN$ ftp ftpserver.de
Connected to meinwebspace.hosteurope.de.
... FTP server ready
331 Password required for MEIN_USER.
230 User MEIN_USER logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>​

bei ls -l ~/.netrc kommt das hier raus:
-rw-------@ 1 LOGIN staff 76 4 Jan 01:36 /Users/LOGIN/.netrc

bei cat ~/.netrc kommt das hier raus:
machine mein_webspace.hosteurope.de login MEIN_LOGIN password MEIN_PWD
 
Gut, und wie seiht es jetzt mit der Schleife aus?
Läuft die jetzt sauber durch und führt zum erhofften Ergebnis?
 
nein, leider nicht - es gibt immer noch diese Fehlermeldungen. Immerhin wird das Skript Zeile für Zeile abgearbeitet.

(...)
Remote system type is UNIX.
Using binary mode to transfer files.
?Invalid command.
221 Goodbye.
(...)
Remote system type is UNIX.
Using binary mode to transfer files.
(remote-file)
EOF received; operation aborted.
221 Goodbye.​

Kopiere ich eine der Befehlszeilen händisch ins Terminal, sieht die Antwort so aus:
ftp> delete PFAD_UND_DATEINAME
250 DELE command successful
 
Dann schreib doch in der Schleife anstelle von
Code:
echo $cmd | ftp ftp.server.de
mal
Code:
echo '$cmd | ftp ftp.server.de'
und schau Dir die Ausgabe an bzw. poste mal ein paar Zeilen davon.
 
dann gibt er zigfach (wahrscheinlich entsprechend der Zeilen in der Löschdatei) dies aus:

$cmd | ftp mein_webspace.hosteurope.de
$cmd | ftp mein_webspace.hosteurope.de
$cmd | ftp mein_webspace.hosteurope.de
$cmd | ftp mein_webspace.hosteurope.de
$cmd | ftp mein_webspace.hosteurope.de
$cmd | ftp mein_webspace.hosteurope.de
$cmd | ftp mein_webspace.hosteurope.de
$cmd | ftp mein_webspace.hosteurope.de​
 
Sorry, war Blödsinn von mit. das erste ' muss natürlich nach dem $cmd kommen.
 
Zurück
Oben Unten