Znajdź plik, w którym nazwa zaczyna się wielką literą

14

Próbuję znaleźć wszystkie pliki, dla których nazwa zaczyna się wielką literą. Próbowałem użyć następującego polecenia:

find . -type f -regex '.*\/[A-Z][^/]*'

Znajduje ścieżki zawierające tylko małe litery. Następujące prace:

find . -type f -regex '.*\/[ABCDEFGHIJKLMNOPQRSTUVWXYZ][^/]*'

Podobnie jak:

find . -type f | grep '.*\/[A-Z][^/]*$'

Wypróbowałem wszystkie różne opcje regextype, z tym samym rezultatem.

Dlaczego findzawiera małe litery [A-Z]? Myślałem, że to regex [a-zA-Z]. Czy jest jakiś sposób, aby określić zakres tylko wielkich liter find?

Karl Bielefeldt
źródło
5
Co LC_ALL=C find ...?
mikeserv
To działa. Czy możesz wyjaśnić, dlaczego w odpowiedzi?
Karl Bielefeldt
3
Mógłbym spróbować, ale możesz tego przegapić .
mikeserv
1
Dlaczego unikasz slash ( \/)? Jakiego znaleziska używasz ( find --version)?
Cristian Ciupitu
1
Ucieczka /jest konieczna tylko wtedy, gdy używasz jej jako separatora, np s/foo\/bar/foobar/. W. (Ale często możesz użyć innego ogranicznika s#foo/bar#foobar#
:.

Odpowiedzi:

35

Nie musisz używać -regex. Zamiast tego możesz użyć -name.

find . -type f -name "[[:upper:]]*"
Costas
źródło