Najít soubory a adresáře v systému Linux pomocí příkazu Najít | Opensource.com

bez ohledu na to, jak organizovaný jsem se rozhodl být, zdá se, že jsou vždy chvíle, kdy prostě nemůžu najít soubor. Někdy je to proto, že si vůbec nepamatuji název souboru. Jindy to jméno znám, ale nevzpomínám si, kde jsem se ho rozhodl zachránit. Jsou dokonce chvíle, kdy potřebuji soubor, který jsem nevytvořil. Bez ohledu na to, co je to dilema, vím, že v systému POSIX mám vždy příkaz find.

instalace find

příkaz find je definován specifikací POSIX, která vytváří otevřený standard, podle kterého se měří systémy POSIX (včetně Linuxu, BSD a macOS). Jednoduše řečeno, již máte nainstalovaný find, pokud používáte Linux, BSD nebo macOS.

ne všechny příkazy find jsou však úplně stejné. Například příkaz GNU find má funkce, které příkaz BSD nebo Busybox nebo Solaris find nemusí mít nebo má, ale implementuje se jinak. Tento článek používá GNU find z balíčku findutils, protože je snadno dostupný a velmi populární. Většina příkazů ukázaných v tomto článku pracuje s jinými implementacemi find, ale pokud byste zkusili příkaz na jiné platformě než Linux a dosáhli neočekávaných výsledků, zkuste stáhnout a nainstalovat verzi GNU.

najděte soubor podle názvu

soubor můžete najít podle názvu souboru zadáním úplného názvu souboru nebo částí názvu souboru pomocí regulárních výrazů. Příkaz find vyžaduje cestu k adresáři, ve kterém chcete hledat, možnosti pro určení atributu, který hledáte (například –name pro název souboru citlivého na velká a malá písmena), a poté vyhledávací řetězec. Ve výchozím nastavení je vyhledávací řetězec zpracován doslovně: příkaz find vyhledá název souboru, který je přesně řetězec, který zadáte mezi uvozovkami, pokud nepoužíváte syntaxi regulárního výrazu.

Předpokládejme, že adresář dokumentů obsahuje čtyři soubory: Foo, foo, foobar.txt, a foo.xml. Zde je doslovné hledání souboru s názvem “foo”:

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

můžete rozšířit vyhledávání tím, že je malá a velká písmena s volbou -iname :

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

zástupné znaky

k rozšíření vyhledávání můžete použít základní znaky zástupných znaků shellu. Například hvězdička (*) představuje libovolný počet znaků:

$ 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

otazník (?) představuje jeden znak:

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

toto není syntaxe regulárního výrazu, takže tečka (.) představuje v tomto příkladu doslovnou tečku.

regulární výrazy

můžete také použít regulární výrazy. Stejně jako u -iname a -name existuje možnost citlivá na velká a malá písmena. Na rozdíl od možností -name a -iname je však vyhledávání -regex a -iregex použito na celou cestu, nejen na název souboru. To znamená, že pokud hledáte foo, nedostanete žádné výsledky, protože foo neodpovídá /home/tux/Documents/foo. Místo toho musíte buď vyhledat celou cestu, nebo použít zástupnou sekvenci na začátku řetězce:

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

najděte soubor upravený za poslední týden

Chcete-li najít soubor, který jste naposledy upravili minulý týden, použijte volbu -mtime spolu s (záporným) počtem dní v minulosti:

$ 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

najděte soubor upravený v rozmezí dnů

můžete kombinovat možnosti -mtime a vyhledat soubor v rozmezí dnů. Pro první argument -mtime uveďte poslední počet dní, kdy jste mohli Soubor Upravit, a pro druhý uveďte největší počet dní. Například, toto vyhledávání hledá soubory s časy úprav více než jeden den v minulosti, ale ne více než sedm:

$ find ~ -mtime +1 -mtime -7

omezit vyhledávání podle typu souboru

je běžné optimalizovat výsledky find zadáním typu souboru, který hledáte. Tuto možnost byste neměli používat, pokud si nejste jisti, co hledáte, ale pokud víte, že hledáte soubor a ne adresář nebo adresář, ale ne soubor, pak to může být skvělý filtr k použití. Volba je -type a její argumenty jsou písmenný kód představující několik různých druhů dat. Nejběžnější jsou:

  • d – adresář
  • f – soubor
  • l – symbolický odkaz
  • s – zásuvka
  • p – pojmenovaná trubka (používá se pro FIFO)
  • b – block special (obvykle označení pevného disku)

zde je několik příkladů:

$ 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

upravte rozsah

příkaz find je ve výchozím nastavení rekurzivní, což znamená, že vyhledává výsledky v adresářích adresářů obsažených v adresářích (a tak dále). To může být ohromující ve velkém souborovém systému, ale můžete použít možnost -maxdepth k určení, jak hluboko do struktury složek chcete find sestoupit:

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

můžete střídavě nastavit minimální hloubku rekurze pomocí -mindepth:

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

Stáhněte si cheat sheet

tento článek pokrývá pouze základní funkce find. Je to skvělý nástroj pro vyhledávání ve vašem systému, ale je to také opravdu užitečný front-end pro výkonný paralelní příkaz. Existuje mnoho důvodů, proč se učit find, takže si stáhněte náš bezplatný find cheat sheet, který vám pomůže dozvědět se více o příkazu.

Leave a Reply