A “WSFY321.c” fájlt keresem hatalmas könyvtárhierarchiában.
Általában a GNU keresés : find . -name "WSFY321.c"
De nem ismerem az esetet, lehet nagybetű, kisbetű vagy mindkettő keveréke.

Mi a legegyszerűbb módja a fájl megkeresésének?
Van valami jobb, mint a find . | grep -i "WSFY321.c"?

Válasz

A GNU legújabb verziói find -iname jelzővel rendelkeznek a kis- és nagybetűk nélküli név keresésekhez.

find . -iname "WSFY321.c" 

Megjegyzések

  • Továbbá, mivel ' újra keres egy fájlt, amelyet valószínűleg leborotválhat még egy pár pipa a -type f zászlóval, így nyert ' ne zavarja a nevet, ha az inode könyvtár. De ez a ' pedáns optimalizálási szint …
  • Néhány regexszel való együttműködéshez megteheti a következőt: find . -iname \*WSFY321.c\* -type f

Válasz

GNU kereséssel vagy a megtalálás más verzióival, amelyek rendelkeznek vele:

find . -iname "WSFY321.c" 

Más verziókkal:

find . -name "[Ww][Ss][Ff][Yy]321.[Cc]" 

Vagy lassabban, de könnyebben beírható kompromisszum:

find . -name "????321.c" | grep -i "/WSFY[^/]*$" 

Vagy zsh-ben:

print -rl -- **/(#i)WSFY321.c 

Megjegyzések

  • @Gilles A grep verzió csak a nagybetűket szűri, én pedig nem ' t megérteni a ' [^ /] ' .. (nem /)
  • @Gilles használja az első idézőjeleket (pontos fájlnév), semmilyen idézőjel helyett?
  • @ Peter.O Nem * a a bash verzióban. grep -i -re gondoltam. se [^/]* helyett .*, nehogy fájlokat fogjon olyan könyvtárakba, amelyek neve WSFY.
  • @Bernhard következetesség.
  • Köszönöm Gilles: Az előző megjegyzést hibás szintaxissal töröltem, és teszteltem a módosított verziót, de nem ' t a * nélkül működik (váratlan okból; legalábbis nekem). A kis- és nagybetűk nem érzékeny opció már nem működik: shopt -s extglob nocaseglob globstar; printf '%s\n' **/WSFY321.c … Feltételezem, hogy ' s miért hívják nocase‍-nek glob : csak globális kontextusban működik (vagy úgy tűnik).

Válasz

Két megoldás a macOS számára:

A GNU használata find:

brew install findutils --with-default-names # restart Terminal find . -iname "WSFY321.c" 

A GNU használata sed:

brew install gnu-sed --default-names # restart Terminal find -name "$(sed "s|\([[:alpha:]]\)|[\U\1\L\1]|g" <<<"WSFY321.c")" 

Megjegyzések

  • MacOS Sierra-ban a -iname opció alapértelmezés szerint elérhető.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük