Hier eine Lösungsmöglichkeit, um in einem Verzeichnis nach allen Tar-Dateien zu suchen und die Inhalte im selbigen zu entpacken (durch leichte Modifikation natürlich anpassbar). Anschließend werden die entpackten Archive gelöscht. Da der UNIX “tar”-Befehl verwendet wird, geht das ganze nur auf UNIX Systemen. Hinweis: Bei mehr als 2000-3000 Dateien im Verzeichnis würde ich das nicht so anwenden, da zu uneffizient/langsam. Aber das ist ein anderes Thema :)
Wie immer sind Verbesserungsvorschläge (Kommentare) erwünscht. Aus pragmatischen Gründen wird dann der folgende Code jedes Mal entsprechend erneuert:
class ApplicationController < ApplicationController::Base def untar result = '' Dir.open(PATH_TO_DIR).each do |file| next if file !~ /tar$/ result += 'Extracting ' + file + '... ' if system('cd ' + PATH_TO_DIR + '; tar -xf ' + file) result += 'done!<br/>Deleting ' + file + '... ' if FileUtils::rm_r(PATH_TO_DIR + file) result += 'done!<br />' else result += 'error!<br />' end else result += 'error!<br />' end processed = true end result += '<br />Extraction completed!' result = 'No compressed files found.' if processed.nil? render(:text => result) end end
PS: Manuel, vielen Dank für dieses WP! Sehr sehr schön. Viele Plugins, schöne Bilder und einfach schön! Wie wär’s, wenn du jetzt noch GANZ SCHNELL ein Ruby-Syntax-Highlight installierst :) DANKE!
Ähnliche Posts:» SVN Commands
» Sessions aufräumen – Stale Sessions Clean Up
» “Capistrano überschreibt meine Dateien immer!”
» WordPress Plugin Shopping Cart (alias wp-commerce) e-downloads knackbar?

Ich heiße Captain Future und meine Leidenschaft ist es die Brücke zwischen Menschen und Technik zu schlagen.
So Syntax-Highlighting ist an… die Farben musst du dir schon selber richtig machen.
Jetzt zu deinem Post. Normal gehört so was doch nicht in den Controller… entweder ins Model, Helper oder in den ApplicationController… was ich mich gerade eh mal frage, wo ist hier das konkrete Anwendungsgebiet? Wofür hast du das gebraucht?
Ach ja und wie kommt es in Line 8 zu dem “untar”?
Freu mich hier mit dir zusammen Fragen und Lösungen zu diskutieren!
noch ne Kleinigkeit. Da du ja das count für nix benutzt außer um zu sehen ob irgendwas entpackt wurde kannst du es auch so machen, dass du oben das count = 0 weg lässt und count = count + 1 durch count = true ersetzt. Dann kannst du am Ende einfach if count.nil abfragen. Also eine Zeile gesparrt :-)
:)
Für mich war das schon eine Controllersache, da es speziell zu den Adminfunktionen meiner Gallery gehörte und separat aufgerufen werden sollte mit Resultatanzeige in einem Ajax-Div. Wofür ich das gebraucht habe? Wenn ich im Urlaub bin und nur ein WebFTP habe, dann packe ich alle Fotos in ein Archiv und lade nur dieses hoch. Schön wäre natürlich noch ZIP, aber dafür braucht man extra tools auf dem System.
Aber du hast recht, allgemein gesehen, gehört es natürlich in den ApplicationController.
Zu deinem “untar”: Diese Konstruktion ist manchmal ganz praktisch:
if var = do_something()
[...]
end
puts var
So lässt sich eine Funktion ausführen und gleichzeitig eine Variable mit dem Ergebnis belegen. Dieses Ergebnis lässt sich dann später abfragen, ohne die Funktion erneut zu benutzen.
Das lässt sich beliebig verketten:
User.save If @username = params[:username] == “marius”
In diesem Beispiel hat man die params überprüft und gleichzeitig eine @variable für die View belegt.
Mit dem Count hatte ich später noch was vor, du hast natürlich recht, ich passe jetzt mal den Quellcode an :)
Wow, das macht Spaß!
(PS: Ich habe ein Problem beim Bearbeiten von Code. Die Leerzeichen am Beginn einer Zeile werden immer gelöscht wenn man Save drückt)
Hmmm wir sollten mal über Controller und Model reden, was wo hin gehört… ich hab da auch noch nicht so die Ahnung aber darüber sollte man mal nach denken…
Ich seh keinen Sinn, dass über Systemaufrufe zu machen, zumal man sich damit auf ein bestimmtes System festlegt.
Wahrscheinlich ist http://raa.ruby-lang.org/project/minitar/ eine wesentlich elegantere Lösung…
naja das mit dem festlegen ist ja nicht wirklich nen grund… ich denke mal alle unix systeme kennen tar und cd… aber klar so ne tar lib ist auch nett…