Bez ohledu na to, jak organizovaný se rozhodnu být, zdá se, že vždy nastanou situace, kdy prostě nemohu najít soubor. Někdy je to proto, že si na prvním místě nemohu vzpomenout na název souboru. Jindy to jméno znám, ale nemůžu si vzpomenout, kde jsem se rozhodl to uložit. Jsou dokonce chvíle, kdy potřebuji soubor, který jsem původně nevytvořil. Bez ohledu na to, o co jde, vím, že na systému POSIX mám vždy find
příkaz.
Další zdroje pro Linux
- Cheat pro příkazy Linuxu
- Cheat sheet pro pokročilé příkazy systému Linux
- Bezplatný online kurz:Technický přehled RHEL
- Síťový cheat pro Linux
- Cheat sheet SELinux
- Cheat pro běžné příkazy pro Linux
- Co jsou kontejnery systému Linux?
- Naše nejnovější články o Linuxu
Instalace find
find
příkaz je definován specifikací POSIX, která vytváří otevřený standard, kterým se měří systémy POSIX (včetně Linuxu, BSD a macOS). Jednoduše řečeno, find
již máte nainstalován, pokud používáte Linux, BSD nebo macOS.
Ne všechny však find
příkazy jsou úplně stejné. GNU find
Například příkaz má vlastnosti, které find
BSD nebo Busybox nebo Solaris příkaz 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 oblíbený. Většina příkazů demonstrovaných v tomto článku funguje s jinými implementacemi find
, ale pokud byste zkusili příkaz na jiné platformě než Linux a získali byste neočekávané výsledky, zkuste si stáhnout a nainstalovat verzi GNU.
Najděte soubor podle názvu
Soubor můžete vyhledat podle názvu souboru zadáním celého názvu souboru nebo částí názvu souboru pomocí regulárních výrazů. find
příkaz vyžaduje cestu k adresáři, ve kterém chcete prohledávat, možnosti k určení, jaký atribut hledáte (například -name
pro název souboru rozlišující malá a velká písmena) a poté hledaný řetězec. Ve výchozím nastavení se s vyhledávacím řetězcem zachází doslovně:find
příkaz hledá název souboru, který je přesně ten řetězec, který zadáte mezi uvozovky, pokud nepoužijete syntaxi regulárního výrazu.
Předpokládejme, že váš adresář Documents 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
Vyhledávání můžete rozšířit tak, že pomocí -iname
nerozlišujete malá a velká písmena možnost:
$ 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í zástupné znaky 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.txtToto není syntaxe regulárního výrazu, takže tečka (
.
) v tomto příkladu představuje 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 rozlišovat malá a velká písmena a nerozlišovat malá a velká písmena. Na rozdíl od-name
a-iname
možnosti, ale-regex
a-iregex
vyhledávání se použije na celou cestu , nejen název souboru. To znamená, že pokud hledátefoo
, nedostanete žádné výsledky, protožefoo
neodpovídá/home/tux/Documents/foo
. Místo toho musíte buď vyhledat celou cestu, nebo použít sekvenci zástupných znaků na začátku řetězce:$ find ~ -iregex ".*foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/FooNajít soubor upravený za poslední týden
Chcete-li najít soubor, který jste naposledy upravili minulý týden, použijte
-mtime
možnost spolu se (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.txtNajděte soubor upravený v rozmezí dnů
Můžete kombinovat
-mtime
možnosti vyhledání souboru v rozmezí dnů. Pro první-mtime
zadejte poslední počet dní, kdy jste mohli soubor upravit, a za druhé uveďte největší počet dní. Toto vyhledávání například hledá soubory s dobou ú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í. Možnost je-type
a jeho argumenty jsou písmenový kód představující několik různých druhů dat. Nejběžnější jsou:
d
- adresářf
- souborl
- symbolický odkazs
- zásuvkap
- pojmenovaná roura (používá se pro FIFO)b
- speciální blok (obvykle označení pevného disku)
Zde je několik příkladů:
$ najít ~ -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
Upravit rozsah
find
příkaz 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 ve velkém souborovém systému ohromující, ale můžete použít -maxdepth
možnost ovládat, jak hluboko do struktury složek chcete find
sestoupit:
$ najít /usr -iname "*xml" | wc -l
15588
$ najít /usr -maxdepth 2 -iname "*xml" | wc -l
15
Minimální hloubku rekurze můžete alternativně nastavit pomocí -mindepth
:
$ find /usr -mindepth 8 -iname "*xml" | wc -l
9255
Stáhněte si cheat sheet
Tento článek popisuje pouze základní funkce find
. Je to skvělý nástroj pro prohledávání vašeho systému, ale je to také opravdu užitečný front-end pro výkonný příkaz Parallel. Existuje mnoho důvodů, proč se naučit find
, takže si stáhněte náš bezplatný find
cheat sheet které vám pomohou dozvědět se více o příkazu.