Anmelden

View Full Version : Ordner im IFS leeren - wie machbar?



Seiten : [1] 2 3

Dominic K.
14-11-16, 09:06
Hallo : D,

ich suche gerade nach einer Lösung um einen Ordner im IFS von allen Dateien zu säubern und das immer automatisch bei einem bestimmtem Programmaufruf.

Die IFS Prozeduren von S. Klement bieten dafür ja anscheinend leider keine Möglichkeit.

Meine Idee bisher ist mittels qsh die Funktion "rm" zu nutzen, und damit rekursiv den Ordner zu leeren. Mit Linux mach ich das ständig, daher diese Idee.

Ist das sinnvoll oder würdet Ihr eine andere Möglichkeit nutzen?

Grüße aus dem Norden
Dominic

KingofKning
14-11-16, 09:08
Wenn Du dich ja mit der Syntax auskennst ist das eine gute Idee. Was besseres findest Du soleicht nicht

GG 4947

Dominic K.
14-11-16, 09:34
OK, das klingt doch schonmal gut. Nun muss ich nur noch rausfinden wie ich aus einem RPG Programm ein SH Befehl absetzen kann. Weist du dazu genaueres oder kann ich das irgendwo nachlesen?

Fuerchau
14-11-16, 09:53
Das geht über den Aufruf:
QSH CMD('rm *')
Aber Achtung, es wird alles ohne Nachfragen gelöscht.
Das Nonplusultra war schon immer der Befehl "rm -R *".
Dieser gehr rekursiv über alle Verzeichnisse und löscht zum Schluss das Verzeichnis selber.
Bei entsprechend hoher Stufe, z.B. "/", ist das das Aus für das System.

Dominic K.
14-11-16, 10:04
Also erstmal danke, ich habe gerade folgendes gefunden:
D QzshSystem PR 10I 0 extproc('QzshSystem')
D command * value options(*string)
D cmd S 2053A varying

damit soll es dann wohl wie mit CL Befehlen klappen. Bei mir klappt es jedoch nicht...bekomme immer -1 als result zurück. Hier mal der Code von meinem Test: http://pastebin.com/Mem1jvPu

Unter der interaktiven qsh klappt der Aufruf aber ohne Probleme.

@Fuerchau: QSH CMD(Befehl), kann man das einfach zo nutzen oder braucht man noch einen Prototypen oder ein bnddir?

Fuerchau
14-11-16, 10:12
QSH ist ein Kommando wie alle anderen auch.
Anstelle der C-Funktionen kannst du auch klassisch QCMDEXC verwenden.
Dann bekommst du auch ggf. mehr Infos, was denn falsch gelaufen ist.

PS:
Ein "rm *" löscht natürlich nur das, wofür du berechtigt bist. Beim 1. Fehler wird aber aufgehört.

Dominic K.
14-11-16, 10:15
ah ok dank dir, werde das so einmal probieren. Vllt. klappt es ja dann.

andreaspr@aon.at
14-11-16, 10:31
D system pr 10i 0 extproc('system')
D cmd * value options(*string)
...
system('QSH CMD(''rm /deinDir'')');

SYSTEM liefert dir auch einen Returncode zurück. Ist zwar primitiv, reicht aber meist aus.

lg Andreas

hel400
14-11-16, 10:40
Möglicherweise verstehe ich die Frage nicht (..), aber warum eigentlich nicht mit dem dafür vorgesehenen AS/400 Cmd?

DEL OBJLNK('/ordnername/*')

Dominic K.
14-11-16, 10:53
Du hast die Frage verstanden : ) das ist eine gute nicht qsh Alternative. Deswegen auch meine Frage zu anderen Lösungen.
Kurze Frage dazu, ist die Gefahr damit das "/" zu löschen genauso hoch wie mit qsh? Will das nicht einfach probieren.

Wenn nicht sehe ich kein Vorteil zu qsh