Existe-t-il une extension maximale du nom de fichier bash (globbing) et si oui, quel est-il? Voir globbing sur tldp.org.
Disons que je veux exécuter une commande sur un sous-ensemble de fichiers:
grep -e bar foo*
rm -f bar*
Y a-t-il une limite au nombre de fichiers que bash va développer, et si oui, quel est-il?
Je ne cherche pas d'autres moyens d'effectuer ces opérations (par exemple en utilisant find
).
bash
wildcards
bash-expansion
Thomas
la source
la source
Réponses:
Il n'y a pas de limite (autre que la mémoire disponible) au nombre de fichiers qui peuvent être développés par un
bash
glob.Cependant, lorsque ces fichiers sont passés en tant qu'arguments à une commande qui est exécutée (par opposition à une fonction ou une fonction intégrée au shell), vous pouvez alors rencontrer une limite de l'
execve()
appel système sur certains systèmes. Sur la plupart des systèmes, cet appel système a une limite sur la taille cumulée des arguments et de l'environnement qui lui sont transmis, et sur Linux également une limite distincte sur la taille d'un seul argument.Pour plus de détails, voir:
Pour contourner cette limite, vous pouvez utiliser (en supposant GNU
xargs
ou compatible):Ci-dessus, comme il
printf
est intégré (dansbash
et la plupart des obus Bourne), nous n'atteignons pas laexecve()
limite. Etxargs
divisera la liste d'arguments en autant d'rm
appels que nécessaire pour éviter laexecve()
limitation.Avec
zsh
:Avec
ksh93
:la source
Vous pouvez voir la limite de la taille totale des arguments avec:
Ceci est généralement déterminé non pas par le shell, mais par le système d'exploitation sous-jacent selon cette réponse .
la source