Zu viele argumente?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
andixx
Beiträge: 9
Registriert: 28.08.2007 19:09:03
Wohnort: Bayern

Zu viele argumente?

Beitrag von andixx » 12.04.2008 11:49:21

Ich weiß, der Thread ist komisch benannt aber ich weiß nicht wie ich das Problem beschreiben soll.

Folgendes Problem: Ich habe eine 700 MB große datei in 1232 kleine files gesplittet welche nun mit ogmcat wieder zusammengefügt werden sollen. Aber scheinbar ist die liste der Argumente dadurch zu lang und ogmcat verweigert sich.
Der aufruf sieht wie folgt aus:

Code: Alles auswählen


ogmcat -o ../output/filexy.ogg $(ls -1v *.c*.ogg)

Es muss scheinbar an der anzahl der dateien liegen. Wenn ich z.b. nur 20, 50 oder 100 teile zusammenfügen will geht es einwandfrei.
Bei den 1232 stück bekomme ich den fehler: (ogmcat.cpp) Could not open "xyz.c1022.ogg".
Die ersten 1021 werden also ignoriert und das 1022'ste bei dem er anfangen will kann er angeblich nicht öffnen.

Was kann das für einen grund haben. Ist da das limit von argv[] ausgeschöpft oder so ähnlich?

gruß
andixx

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Zu viele argumente?

Beitrag von GoKi » 12.04.2008 13:25:34

andixx hat geschrieben:Was kann das für einen grund haben. Ist da das limit von argv[] ausgeschöpft oder so ähnlich?
http://www.gnu.org/software/coreutils/f ... t-too-long

Normalerweise umgeht man das, indem man kleinere Teile bearbeitet, z.B. mittels find und xargs.
Hängt hier wohl davon ab, ob ogmcat die Dateien einfach nur binär hintereinander schreibt oder diese noch bearbeitet werden.
MfG GoKi
:wq

Benutzeravatar
andixx
Beiträge: 9
Registriert: 28.08.2007 19:09:03
Wohnort: Bayern

Re: Zu viele argumente?

Beitrag von andixx » 12.04.2008 14:45:04

Danke für den Hinweis. Es scheint aber wohl nicht an der Bash zu liegen, sonst würde ja ogmcat gar nicht gestartet wenn die Argument list too long wäre. Leider hängt ogmcat die Dateien nicht einfach nur aneinander sondern fügt timestamps etc. ein. Sonst wäre es ja ein einfaches das selbst zu erledigen.

Hier http://www.in-ulm.de/~mascheck/various/argmax/ heißt es außerdem noch:
Number of arguments
At least on Linux 2.6, there's also a limit on the maximum number of arguments in argv[].
Muß ich mal weiter tüfteln wie ich das hin bekomme.

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: Zu viele argumente?

Beitrag von cosmac » 12.04.2008 16:03:04

hi,

es gibt noch ein Limit: die Anzahl der gleichzeitig offenen Files,
das steht bei meinem Lenny per default auf 1024. Als root kannst
du das auf z.B. 2000 erhöhen:

Code: Alles auswählen

ulimit -n 2000
Um anschliessend nicht als root arbeiten zu müssen, würde ich
mit "su - andixx" eine neue Shell aufmachen.
Beware of programmers who carry screwdrivers.

Benutzeravatar
andixx
Beiträge: 9
Registriert: 28.08.2007 19:09:03
Wohnort: Bayern

Re: Zu viele argumente?

Beitrag von andixx » 12.04.2008 16:31:38

Jep darauf habe ich eben auch getippt als ich mir den Source von ogmcat angeschaut hab. Der macht beim einlesen der argumente jede datei auf und die fehlermeldung die ich bekommen habe kommt nur wenn der dateizeiger NULL ist. Ein anderes tool (ogzmerge) verabschiedet sich nach der gleichen anzahl von Dateien.

Und daran lag es wirklich. Vielen vielen dank für den Tip, jetzt geht es endlich und ich bin überglücklich.

PS: Ist die änderung des ulimit nur temporär bis zum nächsten boot oder wo kann ich das fest einstellen?

gruß
andixx

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Zu viele argumente?

Beitrag von gms » 12.04.2008 16:42:41

andixx hat geschrieben: PS: Ist die änderung des ulimit nur temporär bis zum nächsten boot oder wo kann ich das fest einstellen?
diese Limits kannst du in /etc/security/limits.conf einstellen, über "ulimit" gesetze Änderungen gelten nur für die aktuelle Shell und deren Child-Prozesse

Gruß
gms

Antworten