Ik ben op zoek naar het bestand “WSFY321.c” in een enorme directoryhiërarchie.
Gewoonlijk zou ik GNU find : find . -name "WSFY321.c"
Maar ik weet het niet, het kan hoofdletters, kleine letters of een combinatie van beide zijn.
Wat is de gemakkelijkste manier om dit bestand te vinden?
Is er iets beters dan find . | grep -i "WSFY321.c"
?
Antwoord
Recente versies van GNU find
hebben een -iname
vlag, voor het zoeken naar hoofdletter-ongevoelige namen.
find . -iname "WSFY321.c"
Reacties
Answer
Met GNU find, of andere versies van find die het hebben:
find . -iname "WSFY321.c"
Met andere versies:
find . -name "[Ww][Ss][Ff][Yy]321.[Cc]"
Of een compromis dat langzamer maar gemakkelijker te typen is:
find . -name "????321.c" | grep -i "/WSFY[^/]*$"
Of in zsh:
print -rl -- **/(#i)WSFY321.c
Opmerkingen
- @Gilles De
grep
-versie filtert alleen hoofdletters, en ik gebruik ' t begrijp de ' [^ /] ' .. (niet /) - @Gilles Wat is het argument om gebruik de enkele aanhalingstekens in het eerste geval (exacte bestandsnaam) in plaats van helemaal geen aanhalingstekens?
- @ Peter.O Nee
*
na de/
in de bash-versie. Ik bedoeldegrep -i
. Ik u se[^/]*
in plaats van.*
om geen bestanden op te vangen in mappen waarvan de naam begint metWSFY
. - @Bernhard Consistentie.
- Bedankt Gilles: ik heb de vorige opmerking met een onjuiste syntaxis verwijderd en de gewijzigde versie getest, maar dat doet het niet ' t werken zonder de * (om een onverwachte reden; voor mij tenminste). De hoofdletterongevoelige optie werkt niet meer:
shopt -s extglob nocaseglob globstar; printf '%s\n' **/WSFY321.c
… Ik veronderstel dat ' s waarom het een nocase wordt genoemd glob : het werkt alleen in de context van een glob (of zo lijkt het).
Antwoord
Twee oplossingen voor macOS:
GNU gebruiken find
:
brew install findutils --with-default-names # restart Terminal find . -iname "WSFY321.c"
GNU gebruiken sed
:
brew install gnu-sed --default-names # restart Terminal find -name "$(sed "s|\([[:alpha:]]\)|[\U\1\L\1]|g" <<<"WSFY321.c")"
Reacties
- Op macOS Sierra is de optie -iname standaard beschikbaar.
-type f
vlag zodat het ' Kijk niet naar de naam als de inode een directory is. Maar dat ' s pedante optimalisatieniveaus …find . -iname \*WSFY321.c\* -type f