ubuntuusers.de

Thunar Custom Action: Maximal Zahl der Argumente überschritten?

Status: Ungelöst | Ubuntu-Version: Xubuntu 22.04 (Jammy Jellyfish)
Antworten |

Fried-rich

Anmeldungsdatum:
2. Mai 2013

Beiträge: 1128

Hallo,

ich habe hier ein kleines Script das Dateien durchnummeriert. Ich hatte nie einen Ordner mit so viel Dateien, dass es nicht klappte. Jetzt habe ich das ganze mal auf ein Suchergebnis in vielen Unterordnern in Thunar angewendet und es kommt die Meldung

Kindprozess /bin/sh konnte nicht ausgeführt werden (Die Argumentliste ist zu lang)

Hier https://www.sysadminslife.com/linux/bash-binrm-die-argumentliste-ist-zu-lang/ habe ich etwas dazu gefunden, da geht es aber um den Aufruf im Terminal. Das geht bei mir nicht. Ich vermute hier liegt der Fehler darin, dass die Menge an Dateien (oder vermutlich: die Menge der Zeilen aller Pfade der Dateien) zu groß ist die von Thunar an das Script übergeben werden soll. Der Inhalt des Scriptes ist dann belanglos, da kommt nie etwas an. Sehe ich das richtig? Gibt es hier eine Möglichkeit das dennoch zum Laufen zu bringen?

verdooft

Anmeldungsdatum:
15. September 2012

Beiträge: 4287

xargs nutzen oder parallel, Limit der Argumente anpassen, hab ich dazu im Web gefunden.

https://tecadmin.net/solutions-to-the-argument-list-too-long-error/

Fried-rich

(Themenstarter)

Anmeldungsdatum:
2. Mai 2013

Beiträge: 1128

So recht verstehe ich nicht was das bringen soll. find ist hier nicht nutzbar weil ich ja nicht im Script nach Dateien suche sondern die Suche Thunar übernimmt und Thunar die Ergebnisse dann an das Script weiter gibt. Ich verstehe das so, dass schon das Weiterreichen an das Script das Problem ist. Im Script ist es dann egal was ich mache.

verdooft

Anmeldungsdatum:
15. September 2012

Beiträge: 4287

Achso, Thunar kenne ich nicht. Vielleicht lässt sich das gewünschte ja anders realisieren.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17583

Wohnort: Berlin

Die Frage ist, wie Du die Dateien auswählst.

Wenn es zu viele sind für die Argumentliste, dann wahrscheinlich nicht von Hand, außer dass Du vielleicht die Verzeichnisse, die auszuwählen sind, von Hand selektierst.

Die Frage ist, ob Dein Script damit klar käme, die Dateien in Portionen umzubenennen und ob sich das mit der beabsichtigten Nummerierung verträgt.

Generell gilt, dass ein Kommando ./foobar.sh * von der Shell expandiert wird, bevor es an foobar.sh übergeben wird, was zu zu vielen Argumenten führen kann, während ./foobar.sh . nicht expandiert wird, so dass das Script selbst nur den Punkt überreicht bekommt, was dann nicht zu viele sind.

Kannst Du ganze Verzeichnisse überreichen? Wie nummerierst Du im Script? Was ruft Dein Script dann auf?

Demo: Ich habe 100.000 Dateien in ~/tmp/massen/a und ebensoviele in ~/tmp/massen/b erzeugt:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
cd 
mkdir -p tmp/massen/{a,b}
cd tmp/massen
touch a/{00000..99999}
touch b/{00000..99999}
ls a/* b/* 
bash: /usr/bin/ls: Die Argumentliste ist zu lang
ls a/ b/
# ... 
07691.txt  15384.txt  23077.txt  30770.txt  38463.txt  46156.txt  53849.txt  61542.txt  69235.txt  76928.txt  84621.txt  92314.txt
07692.txt  15385.txt  23078.txt  30771.txt  38464.txt  46157.txt  53850.txt  61543.txt  69236.txt  76929.txt  84622.txt  92315.txt

Wie Du siehst hat die zweite Operation problemlos geklappt. Die Zahl endet bei 92315, weil die restlichen Werte in einer weiteren Spalte stehen, die aber ca. 10 Zeilen vorher bei 99999.txt endet und so viele Zeilen wollte ich nicht pasten.

Antworten |