Fájlok és könyvtárak keresése Linuxon a find paranccsal | Opensource.com

függetlenül attól, hogy mennyire szervezett vagyok, úgy tűnik, mindig vannak olyan esetek, amikor egyszerűen nem találok egy fájlt. Néha azért, mert nem emlékszem a fájl nevére. Máskor tudom a nevet, de nem emlékszem, hol döntöttem úgy, hogy megmentem. Vannak olyan esetek is, amikor olyan fájlra van szükségem, amelyet nem én hoztam létre. Nem számít, mi a dilemma, de tudom, hogy egy POSIX rendszeren mindig a find parancs van.

a find

telepítése a find parancsot a POSIX specifikáció határozza meg, amely létrehozza a nyílt szabványt, amellyel a POSIX rendszereket (beleértve a Linuxot, a BSD-t és a macOS-t) mérik. Egyszerűen fogalmazva, már telepítve van a find, amíg Linuxot, BSD-t vagy macOS-t futtat.

azonban nem minden find parancs pontosan egyforma. Például a GNU find parancsnak vannak olyan funkciói, amelyekkel a BSD vagy Busybox vagy a Solaris find parancs nem rendelkezik vagy rendelkezik, de másképp hajtja végre. Ez a cikk a FINDUTILS csomag GNU find – ját használja, mert könnyen elérhető és nagyon népszerű. Az ebben a cikkben bemutatott legtöbb parancs a find más implementációival működik, de ha egy parancsot nem Linuxon próbálsz ki, és nem várt eredményt kapsz, próbáld meg letölteni és telepíteni a GNU verziót.

Fájl keresése név szerint

a fájlt a fájlnév alapján keresheti meg, ha megadja a teljes fájlnevet vagy a fájlnév részeit reguláris kifejezésekkel. A find parancshoz meg kell adni a keresni kívánt könyvtár elérési útját, meg kell adni, hogy milyen attribútumot keres (például –name nagybetűérzékeny fájlnév esetén), majd a keresési karakterláncot. Alapértelmezés szerint a keresési karakterláncot szó szerint kezelik: a find parancs olyan fájlnevet keres, amely pontosan megegyezik az idézőjelek között megadott karakterlánccal, kivéve, ha reguláris kifejezés szintaxist használ.

tegyük fel, hogy a dokumentumok könyvtár négy fájlt tartalmaz: Foo, foo, foobar.txt, és foo.xml. Itt van egy szó szerinti keresés a “foo”nevű fájlra:

$ find ~ -name "foo"
/home/tux/Documents/examples/foo

kibővítheti a keresést úgy, hogy a -iname opcióval kisbetűket érzéketlenné teszi:

$ find ~ -iname "foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo

helyettesítő karakterek

az alapvető shell helyettesítő karakterekkel bővítheti a keresést. Például a csillag (*) tetszőleges számú karaktert jelöl:

$ find ~ -iname "foo*"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

a kérdőjel (?) egyetlen karaktert jelent:

$ find ~ -iname "foo*.???"
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

ez nem reguláris kifejezés szintaxis, ezért a pont (.) ebben a példában egy szó szerinti pontot képvisel.

reguláris kifejezések

reguláris kifejezéseket is használhat. Mint a -iname és -name esetében, létezik egy kis-és nagybetűérzékeny opció is. A -name és -iname beállításokkal ellentétben azonban a -regex és -iregex keresés a teljes elérési útra vonatkozik, nem csak a fájlnévre. Ez azt jelenti, hogy ha a foo kifejezésre keres, akkor nem kap eredményt, mert a foo nem egyezik a /home/tux/Documents/fookifejezéssel. Ehelyett vagy a teljes elérési utat kell keresnie, vagy helyettesítő karaktersorozatot kell használnia a karakterlánc elején:

$ find ~ -iregex ".*foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo

a múlt héten módosított fájl keresése

a múlt héten utoljára módosított fájl megkereséséhez használja a -mtime opciót a múltbeli napok (negatív) számával együtt:

$ find ~ -mtime -7
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

néhány napon belül módosított fájl keresése

a -mtime opciók kombinálásával egy fájlt néhány napon belül megkereshet. Az első -mtime argumentumhoz adja meg a legutóbbi napok számát, amelyeken módosíthatta a fájlt, a másodikhoz pedig adja meg a legtöbb napot. Például, ez a keresés olyan fájlokat keres, amelyek módosítási ideje több, mint egy nap a múltban, de legfeljebb hét:

$ find ~ -mtime +1 -mtime -7

keresés korlátozása fájltípus szerint

gyakori a find eredményeinek optimalizálása a keresett fájltípus megadásával. Ne használja ezt az opciót, ha nem biztos benne, hogy mit keres, de ha tudja, hogy fájlt keres, nem pedig könyvtárat, vagy könyvtárat, de nem fájlt, akkor ez nagyszerű szűrő lehet. Az opció -type, argumentumai pedig egy betűkód, amely néhány különféle adatot képvisel. A leggyakoribbak a következők:

  • d – könyvtár
  • f – fájl
  • l – szimbolikus link
  • s – socket
  • p – nevezett cső (FIFO-hoz használják)
  • b – blokk speciális (általában a merevlemez megnevezése)

Íme néhány példa:

$ find ~ -type d -name "Doc*"
/home/tux/Documents
$ find ~ -type f -name "Doc*"
/home/tux/Downloads/10th-Doctor.gif
$ find /dev -type b -name "sda*"
/dev/sda
/dev/sda1

hatókör beállítása

a find parancs alapértelmezés szerint rekurzív, ami azt jelenti, hogy az eredményeket a könyvtárakban található könyvtárak könyvtáraiban keresi (stb.). Ez elsöprő lehet egy nagy fájlrendszerben, de a -maxdepth opcióval szabályozhatja, hogy a find mappastruktúrába milyen mélyen szeretne leereszkedni:

$ find /usr -iname "*xml" | wc -l
15588
$ find /usr -maxdepth 2 -iname "*xml" | wc -l
15

a rekurzió minimális mélységét felváltva állíthatja be -mindepth:

$ find /usr -mindepth 8 -iname "*xml" | wc -l
9255

töltse le a cheat sheet

ez a cikk csak a find alapvető funkcióit tartalmazza. Ez egy nagyszerű eszköz a rendszeren keresztüli kereséshez, de nagyon hasznos front-end is az erőteljes párhuzamos parancs számára. Számos oka van a find megtanulásának, ezért töltse le ingyenes find csalólapunkat, hogy többet megtudjon a parancsról.

Leave a Reply