Gibt es ein Maximum für die Erweiterung des Dateinamens (Globbing) und wenn ja, was ist das? Siehe Globbing auf tldp.org.
Angenommen, ich möchte einen Befehl für eine Teilmenge von Dateien ausführen:
grep -e bar foo*
rm -f bar*
Gibt es eine Begrenzung für die Anzahl der Dateien, auf die bash erweitert wird, und wenn ja, um welche handelt es sich?
Ich suche nicht nach alternativen Möglichkeiten, um diese Operationen durchzuführen (z find
. B. durch Verwendung ).
bash
wildcards
bash-expansion
Thomas
quelle
quelle
Antworten:
Es gibt keine Begrenzung (außer dem verfügbaren Speicher) für die Anzahl der Dateien, die um einen
bash
Glob erweitert werden können .Allerdings , wenn diese Dateien als Argumente für einen Befehl übergeben werden, der wird ausgeführt (im Gegensatz zu einer Shell - builtin oder Funktion im Gegensatz), dann können Sie in eine Grenze des Lauf
execve()
Systemaufrufes auf einigen Systemen. Auf den meisten Systemen ist für diesen Systemaufruf die kumulative Größe der an ihn übergebenen Argumente und die Umgebung begrenzt, und unter Linux ist die Größe einzelner Argumente separat begrenzt.Weitere Einzelheiten finden Sie unter:
Um diese Grenze zu umgehen, können Sie Folgendes verwenden (vorausgesetzt, GNU
xargs
oder kompatibel):Da oben
printf
(inbash
und die meisten Bourne-ähnlichen Muscheln) eingebaut ist, stoßen wir nicht an dieexecve()
Grenze. Undxargs
teilt die Liste der Argumente in so vielerm
Aufrufe auf, wie erforderlich, um dieexecve()
Einschränkung zu vermeiden .Mit
zsh
:Mit
ksh93
:quelle
Sie können die Grenze für die Gesamtgröße der Argumente sehen mit:
Dies wird im Allgemeinen nicht von der Shell bestimmt, sondern vom zugrunde liegenden Betriebssystem gemäß dieser Antwort .
quelle