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