Czy istnieje maksymalne rozszerzenie nazwy pliku bash (globbing), a jeśli tak, to co to jest? Zobacz globbing na tldp.org.
Powiedzmy, że chcę uruchomić polecenie dla podzbioru plików:
grep -e bar foo*
rm -f bar*
Czy istnieje ograniczenie liczby rozwijanych plików bash, a jeśli tak, to co to jest?
Nie szukam alternatywnych sposobów wykonywania tych operacji (np. Przy użyciu find
).
bash
wildcards
bash-expansion
Tomasz
źródło
źródło
Odpowiedzi:
Nie ma ograniczenia (poza dostępną pamięcią) liczby plików, które mogą być rozszerzane przez
bash
glob.Jednak gdy pliki te są przekazywane jako argumenty do komendy, która jest wykonywana (w przeciwieństwie do wbudowanej powłoki lub funkcji), możesz napotkać limit
execve()
wywołania systemowego w niektórych systemach. W większości systemów to wywołanie systemowe ma limit łącznej wielkości argumentów i przekazywanego mu środowiska, a w Linuksie także oddzielny limit wielkości pojedynczych argumentów.Aby uzyskać więcej informacji, zobacz:
Aby obejść ten limit, możesz użyć (zakładając GNU
xargs
lub zgodny):Powyżej, ponieważ
printf
jest wbudowany (wbash
i większość powłok podobnych do Bourne'a), nie osiągamyexecve()
limitu. Ixargs
podzieli listę argumentów na tylerm
inwokacji, ile potrzeba, aby uniknąćexecve()
ograniczenia.Z
zsh
:Z
ksh93
:źródło
Możesz zobaczyć limit całkowitej wielkości argumentów za pomocą:
Zasadniczo jest to określane nie przez powłokę, ale przez podstawowy system operacyjny zgodnie z tą odpowiedzią .
źródło