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/foo
kifejezé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