Find, Zip - und das mit mehreren dateien?

  • Ersteller pfannkuchen2001
  • Erstellt am
pfannkuchen2001

pfannkuchen2001

Aktives Mitglied
Thread Starter
Dabei seit
17.02.2006
Beiträge
2.600
Reaktionspunkte
48
Hi,

wie kann ich mit dem Find befehl mehrere Dateien Zippen?
- ich möchte ein Verzeichnis durchlaufen, und alle *.tif dateien einzeln Zippen - mit erhalt des Dateinamens!

Hat jemand da eine Idee?

Ich habe es bisher so probiert:

Code:
find . -name *.tif | while read i ; do zip „${i%.*}“ „$i“ ; done
find: Ansicht2_0000.tif: unknown option

Warum bekomme ich diesen fehler?

Grüße,

Pfannkuchen
 
Keine Ahnung, aber warum machst Du das so umständlich?
Ist ja grausam. :confused:

Wie wärs damit?
Code:
for file in *tiff
do
zip $file.zip $file
done
 
Hi,

danke für die Antwort! Aber wie kann ich nun verschiedene Ordner durchsuchen? Also recursiv?

Grüße,

Pfannkuchen
 
In der Z-Shell geht das relativ einfach:
Code:
for file in **/*tiff
do
zip $file.zip $file
done

In der bash könnte man z.B. so etwas machen:
Code:
for file in $(find . -name \*.tiff)
do
echo zip $file.zip $file
done

Auch so was funktioniert:
Code:
find . -name \*tiff -exec zip {}.zip {} \;

Damit wären wir auch bei der Beantwortung Deiner Frage.
Warum bekomme ich diesen fehler?
Weil Du den Stern nicht escapest. Deswegen wird er von der Shell verarbeitet und nicht vom find Befehl.
In Deinem Aufruf hast Du allerdings einen weiteren Fehler drin ;).

Gruß
maceis
 
So nun noch ein Update:

ich habe das ganze nun endlich geschafft!
das ganze Automatording soll nun eine Ordneraktion werden. Wie und wo muss ich das abspeichern, damit jedes *.tif welches ich in den ordner lege sofort gezippt wird?

Grüße,

Pfannkuchen

EDIT:

ich habe nun das Als Ordneraktion abgespeichert. Leider funktioniert das nicht wirklich. Wenn ich eine Tif in den Unterordner lege, dann passiert einfach garnichts! Jedenfalls funktioniert das nur im Rootordner. In den Unterordnern funktioniert das leider nicht mit dem Zippen!
Das ganze sieht nun so aus, wie im Anhnag. Was mache ich falsch?
 

Anhänge

  • Bildschirmfoto 2011-05-03 um 11.27.00.jpg
    Bildschirmfoto 2011-05-03 um 11.27.00.jpg
    64,8 KB · Aufrufe: 64
Zuletzt bearbeitet:
So, ich habe nun aus einem anderen Forenbeitrag folgende möglichkeit:

1 Script welches das (in meinem Falle) zippen übernimmt, und eines welches schaut, ob Ordner dazukommen, und das zip-script ablegt.

D.h.:

ich habe mir ein script gebaut, welches tifs in einem Ordner Sucht. Das sieht so aus:

on opening folder thisFolder
do shell script "find . -iname '*.tif' -exec zip {}.zip {} \\;"
end opening folder

gespeichert unter /HDD/Library/Scripts/Folder Action Scripts/Tif-zip.scpt.

und dann habe ich noch eins angelegt welches so aussieht:
on adding folder items to thisFolder after receiving newItems
set theAction to "HDD:Library:Scripts:Folder Action Scripts:Tif-zip.scpt"
tell application "Finder"
repeat with anItem in newItems
if kind of anItem = "Folder" then
tell application "System Events" to attach action to anItem using theAction
end if
end repeat
end tell
end adding folder items to

Das ding habe ich auch im Action Scripts Folder abgelegt, und an den Root Ordner angehangen. Leider wird nichts gezippt!
Gibt es eine Art debug menu für applescript scripte?

Grüße,

Pfannkuchen
 
Ich mach´ ja kaum was mit Ordneraktionen, insofern kann ich mich täuschen.

Auf den ersten Blick sieht es für mich so aus, als ob jedes mal, wenn der Ordner geöffnet wird, alle tif Dateien in dem Ordner und in allen Unterordnern neu gezipt werden.
Ist das wirklich so gewollt?
Ich fände es eher ineffizient - zumal Du die Ordneraktion ja ohnehin an alle Unterordner hängst.

Warum nicht einfach nur mit AS schauen, ob eine neue Datei in einem der betreffenden Ordner auf '.tif' endet und dann genau diese Datei zippen.
Da muss dann auch nichts rekursiv sein (wozu auch?).
 
Hmmm,

ich habe noch nie etwas mit Applescript gemacht. Allerdings klingt es wirklich doof, jedes Zip neu zu erstellen, besonders weil es sich bei mir um renderings handelt. (Und von denen es bei animationen eine ganze Menge gibt...)

Gegen eine effizientere Variante habe ich nichts einzuwenden.
Das Problem ist, dass die Ordnerstruktur automatisch erstellt wird. Es muss also überwacht werden, wann ein neuer Ordner erstellt wird!
Wie ich das in AS umsetzen kann weis ich nicht.

eine Andere Idee wäre noch, das ganze verzeichnis per Cron mit find durchlaufen zu lassen, und alles einfach wie wild zu zippen.
Das Problem dabei wäre wieder, dass ich erstens nicht weis, ob es Cron noch auf macosx gibt, und 2. dass ich wieder bei dem Problem bin, dass alles immerwieder gezippt wird - und dadurch wertvolle rechenleistung verbraucht wird.

Das ganze mache ich nur, weil ich auf einem Anderen Rechner rendere als auf dem, auf dem ich die Bilder verwende. Da der renderrechner bei mir zu hause Steht, und nur an standard DSL gehängt ist, brauche ich gezippte Tifs.

Wie könnte ich das per Applescript umsetzen?

Grüße,

Pfannkuchen
 
Das ganze mache ich nur, weil ich auf einem Anderen Rechner rendere als auf dem, auf dem ich die Bilder verwende. Da der renderrechner bei mir zu hause Steht, und nur an standard DSL gehängt ist, brauche ich gezippte Tifs.

Aha - da kommts raus ;).
Du brauchst die Zip Dateien gar nicht sondern möchtest nur Übertragungsvolumen sparen.
Wie oft (bzw. wann) und wie werden die Daten dann vom "Renderrechner" zum "anderen rechner" übertragen?

Ich würde jedenfalls die Daten nur für die eigentliche Übertragung komprimieren.
Da fallen mir gleich mehrere Lösungen ein.
Die passen dann auch wider besser ins Unix Forum :D.
 
Hallo,
ich hab für Komprimierscripte immer gzip genutzt:

find . -name '*.tif' -exec gzip {} \;

gzip ersetzt das *.tif durch ein *.tif.gz
Dadurch werden durch ein wiederholtes durchsuchen der Ordner die schon gezippten Dateien nicht noch mal gepackt, da sie ja nicht mehr vorhanden sind.

Viele Grüße
 
oder einfach zip -u ...

und warum nicht gleich aus dem renderer ein komprimiertes tiff schreiben (falls möglich)?
 
Zurück
Oben Unten