Nehmen wir an, ich habe einen Build-Prozess, bei dem einer der Schritte darin besteht, eine Transformation auf eine Reihe von Dateien anzuwenden, sodass eine Quelldatei einer Zieldatei entspricht. Dies kann so etwas wie Komprimierung, Verschlüsselung, Bildskalierung usw. sein.
Da es sehr lange dauert, dies jedes Mal für alle Quelldateien zu tun, möchte ich es inkrementell tun, sodass eine Datei nur verarbeitet wird, wenn sie neuer ist als die entsprechende Zieldatei.
Es scheint mir, dass dies ein sehr allgemeiner Prozess und eine sehr allgemeine Bedingung ist, also frage ich mich, ob es ein vorhandenes Tool gibt, das sich um diesen Teil des Prozesses kümmern kann? Ich muss also nur einen Befehl selbst implementieren, der eine Eingabe- und Ausgabedatei als Parameter verwendet (oder stdin/out verwendet) - falls es noch nicht existiert.
Linux- und/oder Windows-Lösungen willkommen. Optionale Bonusfunktionen:
Ist das vielleicht etwas, make
das tun kann?
Sie können make
, scons
, ant usw. verwenden, die alle im Grunde eine Regel der Form annehmen:
Zieldatei hängt von Eingabe(n) ab
und eine Operation:
Ziel erstellen durch Ausführen von Schritt(en)
Das Build-Tool untersucht alle Beziehungen und führt den Build durch, einschließlich der Fälle, in denen die Ausgabedatei eines Prozesses eine der Abhängigkeiten von einem oder mehreren der anderen ist, und erstellt nur die Ziele korrekt neu, deren Vorfahren sich geändert haben.
make
arbeitet ausschließlich mit Zeitstempeln. scons
verwendet eine Kombination aus Zeitstempeln, Größen und MD5s, um zu überprüfen, was geändert wurde.
NB Softwareentwickler verwenden diese Tools seit Jahren, aber es gibt keinen Grund, warum sie nicht auf eine Verarbeitung angewendet werden können, vorausgesetzt, dies kann über die Befehlszeile oder per Skript erfolgen . Mehrere Tools versuchen sogar, parallel zu verarbeiten. Wenn also a -> A und b -> B, aber A + B -> C, kann die Transformation der ersten beiden parallel durchgeführt werden, aber C kann nicht erstellt werden, bis beide fertig sind.
Verwenden Sie Python. Ich verstehe Ihr Dilemma jedoch nicht: Sie überprüfen den Zeitstempel Ihrer Dateien[1] und den Ordnerinhalt, Sie überprüfen, ob eine _001.zip-Datei existiert[2] / oder high_res.jpg existiert und wenn nicht, erstellen Sie sie[3] [4]. Sie wenden beispielsweise unterschiedliche Skalierungsparameter auf ffmpeg und 7zip[5][6] an.
[1] https://stackoverflow.com/a/237084/1889814
[2] https://stackoverflow.com/a/82852/1889814
[3] https://stackoverflow.com/a/24745969/1889814
[4 ] https://stackoverflow.com/a/14569017/1889814
[5] https://trac.ffmpeg.org/wiki/Scaling%20(resizing)%20with%20ffmpeg
[6] https://sevenzip.osdn. jp/chm/cmdline/syntax.htm
Thomas Weller
Bart van Heukelom