[GastForen Betriebsysteme und Dienste HELIOS Helios Scriptserver

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Helios Scriptserver

Mabusesteve
Beiträge gesamt: 52

16. Aug 2017, 14:45
Beitrag # 1 von 6
Bewertung:
(29789 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen

Ich habe mit dem Script Assistent ein Script zur Umrechnung von Bildern erstellt. Das läuft und bringt das gewünschte Ergebnis.

Aber er läuft nur wenn das zu bearbeitende Verzeichnis in den Hotfolder kopiert wird. Wenn das Verzeichnis nur in den Hotfolder verschoben wird läuft es nicht los.
Also wenn es auf dem gleichen Heliosvolumen in den Hotfolder geschoben wird passiert nicht, wenn es rein kopiert wird - alles bestens...

Da ich leider kein Scriptkenntnisse habe, kann mir jemand vielleicht einen Tipp geben.

hier noch das script:
#!var/run/runperl -w
# $Id: conversionTemplate.pl,v 1.11 2015/02/16 13:53:21 tom Exp $

#
# Sample configuration
#
my $default_settings = <<'</SETTINGS>'; # Let Perl ignore the settings block
<SETTINGS>
<General
Enable="true"
Hot_Folder="/HotFolderPath"
Include_Subdirectories="false"
User=""
Timeout="600"
/>
<File_Types
Types="TIFF,JPEG,EPSF,8BIM,8BPS,PICT,BMP ,PNGf,..CT,PDF ,JP2 ,RAW "
Suffixes="tif,jpg,eps,psd,pct,bmp,png,sct,pdf,jp2,raw,cr2,nef,arw,dng,orf,raf,pef,sr2,crw,x3f,erf,mef,rw2"
Folder_Changes="false"
/>
<Environment
OUTDIR="DONE"
ERRDIR="ERROR"
CONVNAME_ADDITION="conv"
/>
</SETTINGS>

use strict;

BEGIN {
use vars qw($HELIOSDIR);
$HELIOSDIR = $ENV{"HELIOSDIR"} or die "HELIOSDIR not set in environment\n";
unshift(@INC, "$HELIOSDIR/etc/perl");
}

use HELIOS::Utils;
use File::Basename;
use IO::Handle;
STDOUT->autoflush(1);
STDERR->autoflush(1);

# input file
my $sInputFile = $ARGV[0] || die "$0: no input file specified\n";

# used applications
my $layoutCmd = "$HELIOSDIR/bin/layout";
my $dtCmd = "$HELIOSDIR/bin/dt";

# environment parameters
my $sOutDir = $ENV{OUTDIR} || "DONE";
my $sErrDir = $ENV{ERRDIR} || "ERROR";
my $sConvNameAdd = $ENV{CONVNAME_ADDITION} || "conv";
my $iScriptDebug = int ($ENV{SCRIPTDEBUG} || "0");

# get directory name, base name with and without suffix from input file name
my $iPos = rindex($sInputFile, "/") + 1;
my $sWorkDir = HELIOSPathToSystemPath(substr($sInputFile, 0, $iPos));
my $sBasename = substr($sInputFile, $iPos);
(my $sShortBasename = $sBasename) =~ s/\.\w*$//;
my $Suffix = substr($sBasename, rindex($sBasename, "."));

my $DeleteOriginal = 1;
my $sTargetSuffix = ".jpg";

print " Start Script: [$$] $0 $sInputFile\n" if ($iScriptDebug > 0);

chdir("$sWorkDir") || die "[$$] $0: cannot change working directory to $sWorkDir\n";

if (! -d $sOutDir) {
!system("$dtCmd", "mkdir", "$sOutDir") || die "[$$] $0: cannot create directory $sWorkDir$sOutDir\n";}
if (! -d $sErrDir) {
!system("$dtCmd", "mkdir", "$sErrDir") || die "[$$] $0: cannot create directory $sWorkDir$sErrDir\n";}

# determine names of moved input file and output files
my $sProcessedFile = "$sShortBasename.$sConvNameAdd$sTargetSuffix";
my $iCounter = 0;

while (-f "$sOutDir/$sProcessedFile" || -f "$sErrDir/$sProcessedFile") {
$iCounter++;
$sProcessedFile = "$sShortBasename.$iCounter.$sConvNameAdd$sTargetSuffix";
}

print STDERR "Status: Running image conversion for file $sInputFile\n";
my $EventOption="-E"; # used for the 'dt' calls below

my @cmd = ($layoutCmd);


push @cmd, ("-T","JPEG");
push @cmd, "-oPrintColor=RGB";
push @cmd, "-oCompressQuality=100";
push @cmd, "-oCompressPrint=JPEG";
push @cmd, "-oScreenResolution=0";
push @cmd, "-oSpotToProcess=FALSE";
push @cmd, "-oIgnoreMasks=FALSE";
push @cmd, "-oIgnoreSpots=FALSE";
push @cmd, "-oOmitProfile=FALSE";
push @cmd, "-oIncludeProfile=TRUE";
push @cmd, "-oThumbnail=TRUE";
$EventOption="";
push @cmd, ("-l","$sBasename");
push @cmd, "$sProcessedFile";


print "[$$] Command line: " . (join " ", @cmd) . "\n" if ($iScriptDebug > 0);

my $iReturnValue = system(@cmd);

my $targetDir = $sErrDir;
if (!$iReturnValue) {
$targetDir = $sOutDir;
print "[$$] Move \"$sProcessedFile\" to \"$targetDir/$sProcessedFile\"\n";
@cmd=("$dtCmd", "mv");
push @cmd, $EventOption if $EventOption ne "";
push @cmd, "$sProcessedFile";
push @cmd, "$targetDir/$sProcessedFile";
system(@cmd) == 0 || die "[$$] $0: cannot move converted file to directory $sWorkDir$targetDir";
}

$sProcessedFile = "$sShortBasename". ($iCounter?".$iCounter":"") . "$Suffix";

if ($DeleteOriginal) {
print "[$$] Remove original file \"$sBasename\" \n";
@cmd=("$dtCmd", "rm");
push @cmd, $EventOption if $EventOption ne "";
push @cmd, "$sBasename";
system(@cmd) == 0 || die "[$$] $0: cannot remove input file.";
} else {
print "[$$] Move \"$sBasename\" to \"$targetDir/$sProcessedFile\"\n";
@cmd=("$dtCmd", "mv");
push @cmd, $EventOption if $EventOption ne "";
push @cmd, "$sBasename";
push @cmd, "$targetDir/$sProcessedFile";
system(@cmd) == 0 || die "[$$] $0: cannot move input file to directory $sWorkDir$targetDir";
}
print "End Script: [$$] $0 $sInputFile\n" if ($iScriptDebug > 0);

exit 0;
X

Helios Scriptserver

GreatOm
Beiträge gesamt: 378

21. Aug 2017, 13:13
Beitrag # 2 von 6
Beitrag ID: #559154
Bewertung:
(29674 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Aber er läuft nur wenn das zu bearbeitende Verzeichnis in den Hotfolder kopiert wird. Wenn das Verzeichnis nur in den Hotfolder verschoben wird läuft es nicht los.
Also wenn es auf dem gleichen Heliosvolumen in den Hotfolder geschoben wird passiert nicht, wenn es rein kopiert wird - alles bestens...

Da ich leider kein Scriptkenntnisse habe, kann mir jemand vielleicht einen Tipp geben.


Das ist der falsche Weg. Ein Hotfolder funktioniert nur für die entsprechenden Dateitypen. Wenn ein Verzeichnis in den Hotfolder kopiert wird, geht es wenn "Mit Unterordnern" aktiv ist, was normalerweise nicht der Fall ist. Andernfalls könnte es zu weiteren Aktionen führen, wenn die fertigen Dateien vom Skript in den "DONE" Ordner verschoben werden.

Wenn nun ein Verzeichnis auf einem Volume verschoben wird, bekommt man nur einen Event für das Verzeichnis selber. Alle darunter liegenden Objekte werden ignoriert.
Daher sollte kein Verzeichnis, sondern nur dessen Inhalt (also nur die zu konvertierenden Dateien) in den Hotfolder verschoben werden.

Hilft das weiter?

Gruß,

GreatOm


als Antwort auf: [#559087]

Helios Scriptserver

Mabusesteve
Beiträge gesamt: 52

21. Aug 2017, 13:56
Beitrag # 3 von 6
Beitrag ID: #559155
Bewertung:
(29665 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Great Om

Danke für deine ausführliche Antwort.

Ich hatte das Script mit der "Mit Unterordnern" Funktion versehen. Die Ergebnisse landen dann im DONE Ordner. Würde mir so passen :-)

Ich verstehen nicht ganz warum das nur beim in den Hotfolder kopieren funktioniert, aber nicht beim "verschieben" funktioniert.

Aber villeicht hast du einen andern Idee zur Lösung des Problem:

Wir müssen ca. 30000 Bilder "umspeichern" von tif in JPG Format.
Das Problem ist, dass die Struktur der Verzeichnisse erhalten bleiben muss!
So müsste ich nur die umgerechneten aus dem DONE Verzeichnis nehmen und wenn alles fertig ist die DONE Verzeichnisse löschen.

Merci


als Antwort auf: [#559154]

Helios Scriptserver

GreatOm
Beiträge gesamt: 378

21. Aug 2017, 14:13
Beitrag # 4 von 6
Beitrag ID: #559156
Bewertung:
(29664 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Aber villeicht hast du einen andern Idee zur Lösung des Problem:


Yep.
In diesem Fall einfach "Mit Unterordnern" beibehalten und das Verzeichnis mit den Bildern in den Hotfolder legen.

Nun von HELIOS Applications -> MacOS -> ImageServer Tools -> Touch.dmg öffnen, "Touch.app" auf den Schreibtisch kopieren und das Diskimage wieder auswerfen.

Nun kannst Du den Order im HotFolder öffnen und alle Dateien (auf keinen Fall die evtl. vorhandenen DONE-Ordner) auf "Touch.app" droppen.

Du musst hier aufpassen, dass nur die zu bearbeitenden Dateien "getoucht" werden, da ansonsten auch alles im DONE-Ordner einen Event bekommt, wodurch auch diese Bilder neu verarbeitet werden und in einem frischen DONE-Ordner landen, der dann evtl. wieder bearbeitet wird usw.
Das ist die Gefahr bei "Mit Unterordnern".

Vielleicht kannst Du das ja erst einmal mit ein paar Dateien im Ordner testen.

Hilft das weiter?

Gruß,

GreatOm


als Antwort auf: [#559155]

Helios Scriptserver

Mabusesteve
Beiträge gesamt: 52

21. Aug 2017, 14:34
Beitrag # 5 von 6
Beitrag ID: #559157
Bewertung:
(29652 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
wieder einmal ein Hoch auf diese Foren!

Danke Great Om!!! Genau so soll es sein.

Gabs das auch irgendwo dokumentiert und ich habs einfach nicht gefunden?
Oder liegst an meinen mangelnden tieferen System Kenntnissen?

Kann dieser "Touch" noch mehr ;-) ?

Merci!


als Antwort auf: [#559156]

Helios Scriptserver

GreatOm
Beiträge gesamt: 378

21. Aug 2017, 14:55
Beitrag # 6 von 6
Beitrag ID: #559158
Bewertung:
(29650 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Danke Great Om!!! Genau so soll es sein.


Schön, dass es geholfen hat ;-)

Antwort auf: Gabs das auch irgendwo dokumentiert und ich habs einfach nicht gefunden?


Gute Frage…

Ein grep in HELIOSDIR zeigt, dass das Programm zum ImageServer gehört("Manifest.is"):
Code
[helios] grep Touch Manifest.* 
Manifest.is:public/MacOS/ImageServer Tools/Touch.dmg(5.0.0)
Manifest.is:public/Windows/ImageServer Tools/Touch.exe(5.0.0)


Eine Suche im Handbuch zeigt dann "5.5 Aktualisierung von Layoutbildern mit dem Programm „touch“" (http://www.helios.de/...-d/using.html#a00076)

Gruß,

GreatOm


als Antwort auf: [#559157]
X