find je příkaz pro rekurzivní filtrování objektů v souborovém systému na základě jednoduchého podmíněného mechanismu. Příkaz find slouží k vyhledání souboru nebo adresáře v souborovém systému. Pomocí příznaku -exec lze soubory vyhledat a ihnedzpracovat v rámci téhož příkazu.

- Vyhledání souborů v Linuxu podle jména nebo přípony
- Obvyklé příkazy a syntaxe vyhledávání v systému Linux
- Nalezení souboru v Linuxu pomocí jména souboru
- Nalezení souboru v aktuálním adresáři pomocí příkazu Find
- Vyhledání souborů obrazu v systému Linux pomocí příkazového řádku
- Nalezení prázdného souboru v adresáři pomocí příkazového řádku
- Možnosti a optimalizace pro vyhledávání souborů v Linuxu pomocí příkazového řádku
- Vyhledávání souborů v Linuxu podle času změny pomocí příkazového řádku
- Pomocí příkazového řádku
- Zpracování a vyhledávání souborů pomocí příkazu Find v systému Linux
- Jak najít a odstranit soubory pomocí příkazového řádku Linuxu
Vyhledání souborů v Linuxu podle jména nebo přípony
Pomocí find z příkazového řádku vyhledáte konkrétní soubor podle jména nebo přípony. Následující příklad vyhledá *.err soubory v adresáři /home/username/ a všech podadresářích:
find /home/username/ -name "*.err"
Podobný výstup byste měli vidět v konzoli:
/home/username/example.errThe matching file in the /home/username/ directory is "example.err"
Obvyklé příkazy a syntaxe vyhledávání v systému Linux
Příkaz find má obvykle následující podobu:
find options starting/path expression
- Atribut
optionsřídí chování a způsob optimalizace procesufind. - Atribut
starting/pathdefinuje adresář nejvyšší úrovně, ve kterémfindzačíná filtrovat. - Atribut
expressionřídí testy, které prohledávají hierarchii adresářů a vytvářejí výstup.
Nalezení souboru v Linuxu pomocí jména souboru
Pro nalezení souboru pomocí jména souboru použijte syntaxi find -name filename. Vynecháním cesty se soubor vyhledá na celém disku. Například soubor s názvem example.err umístěný v adresáři /home/username můžete najít následujícím příkazem:
find -name example.err
Měli byste vidět podobný výstup:
./username/example.err
Nalezení souboru v aktuálním adresáři pomocí příkazu Find
Podívejte se na příklad adresářové struktury a souborů. Odkazuje se na ně v příkladech této příručky.
├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err├── directory_2│ └── example.err├── directory_3│ └── example.err├── image01.png├── web_files│ ├── app.html│ ├── cb=gapi.loaded_0│ ├── edit.html│ ├── m=_b,_tp│ ├── rs=AA2YrTtgyE1yYXiu-GuLS6sbJdYr0u8VBQ│ ├── rs=AA2YrTvod91nzEJFOvvfJUrn6_vLwwY0bw│ ├── saved_resource.html│ ├── single.html│ └── unnamed.jpg├── web.html└── example.err
Jestliže se nacházíte v adresáři directory_1 a chcete v něm nebo v některém z jeho podadresářů najít soubor example.err, můžete zadat následující příkaz:
find . -name example.err
Výstup se podobá následujícímu:
./example.err./directory_1/example.err
Výstup odráží strukturu adresáře directory_1:
├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err
Vyhledání souborů obrazu v systému Linux pomocí příkazového řádku
Podle struktury souborů v předchozí části existuje obraz s názvem image01.png, který se nachází v kořenovém adresáři (/)s adresářové struktury.
Chcete-li najít soubor image01.png, spusťte následující příkaz find, který vyhledá všechny soubory .png uložené uvnitř adresáře /.
find -name *.png
Měli byste vidět podobný výstup:
./image01.png
Změňte typ souboru obrazu a vyhledejte všechny soubory .jpg v kořenovém adresáři (/):
find -name *.jpg
Výstup se podobá příkladu. Pro zobrazení umístění souboru se podívejte na příklad adresářové struktury v předchozí části.
./web_files/unnamed.jpg
Nalezení prázdného souboru v adresáři pomocí příkazového řádku
Pro nalezení prázdného souboru v adresáři pomocí příkazového řádku zadejte následující příkaz:
find . -type f -empty
Pokud se nevrátí žádný výstup, pak v aktuálním adresáři není prázdný soubor.
Možnosti a optimalizace pro vyhledávání souborů v Linuxu pomocí příkazového řádku
Výchozí konfigurace pro find ignoruje symbolické odkazy. Pokud chcete, aby find sledoval a vracel symbolické odkazy, přidejte do příkazu volbu -L, jak je uvedeno níže:
find -O3 -L /var/www/ -name "*.html"
Tento příkaz povoluje maximální úroveň optimalizace (-O3) a umožňuje find sledovat symbolické odkazy (-L). find prohledává celý adresářový strom pod /var/www/ a hledá soubory, které končí .html.
find optimalizuje svou strategii filtrování, aby zvýšil výkon. Tři uživatelsky volitelné úrovně optimalizace jsou specifikovány jako -O1, -O2 a -O3. Optimalizace na úrovni -O1 je výchozí a nutí find filtrovat na základě názvu souboru před spuštěním všech ostatních testů.
Optimalizace na úrovni -O2 upřednostňuje filtrování podle názvu souboru, stejně jako v případě -O1, a poté spustí veškeré filtrování podle typu souboru před pokračováním dalších podmínek náročnějších na zdroje. Optimalizace na úrovni -O3 umožňuje find provést nejpřísnější optimalizaci a změnit pořadí všech testů na základě jejich relativní náročnosti a pravděpodobnosti jejich úspěchu.
| Příkaz | Popis |
|---|---|
-O1 |
Filtrovat nejprve podle názvu souboru (výchozí). |
-O2 |
Nejprve název souboru, pak typ souboru. |
-O3 |
Povoluje find automatickou změnu pořadí vyhledávání na základě efektivního využití zdrojů a pravděpodobnosti. úspěchu |
-maxdepth X |
Prohledat aktuální adresář i všechny podadresáře v hloubce X úrovní. |
-iname |
Vyhledat bez ohledu na případ textu. |
-not |
Vrátit pouze výsledky, které neodpovídají testovacímu případu. |
-type f |
Vyhledávání souborů. |
-type d |
Vyhledávání adresářů. |
Vyhledávání souborů v Linuxu podle času změny pomocí příkazového řádku
Příkaz find může filtrovat hierarchii adresářů na základě toho, kdy byl soubor naposledy změněn. Například následující příkaz vyhledá všechny soubory s příponou .err, které byly změněny za posledních 7 dní:
find / -name "*err" -mtime -7
Příklad příkazu vrátí následující výstup:
/home/username/directory_3/example.err/home/username/username/example.err/home/username/username/directory_2/example.err/home/username/username/directory_1/example.err/home/username/username/directory_1/subdirectory_1/example.err
Pomocí příkazového řádku
Příkaz find dokáže filtrovat hierarchii adresářů pouze na základě názvu a metadat souboru. Pokud potřebujete vyhledávat na základě obsahu souboru, použijte nástroj jakoegrep. Uvažujte následující příklad:
find . -type f -exec grep "test" '{}' \; -print
Tento příkaz prohledá každý objekt v aktuální hierarchii adresářů (.), který je souborem (-type f), a poté spustí příkaz grep "test" pro každý soubor, který splňuje podmínky. Soubory, které vyhovují, jsou vypsány na obrazovku (-print). Kudrnaté závorky ({}) jsou zástupným znakem pro výsledky hledání shody. Znaky {} jsou uzavřeny v jednoduchých uvozovkách ('), aby se zabránilo předání grep chybného názvu souboru. Příkaz -exec je ukončen středníkem (;), který by měl být escapován (\;), aby se zabránilo interpretaci shellem.
Soubor použitý v příkladu (example.err) má uvnitř text „test“. Po spuštění příkladu se zobrazí podobný výstup:
test./directory_3/example.errtest./example.errtest./directory_2/example.errtest./directory_1/example.errtest./directory_1/subdirectory_1/example.err
Grep identifikoval každý soubor v aktuálním pracovním adresáři, který obsahuje řetězec „test“.
Poznámka
Před implementací volby
-execv příkazufindbylo možné vygenerovat podobný výstup jako v příkladu výše pomocí příkazuxargs:find . -type f -print | xargs grep "test"
Zpracování a vyhledávání souborů pomocí příkazu Find v systému Linux
Volba -exec spouští příkazy proti každému objektu, který odpovídá výrazu find. Uvažujme následující příklad:
find . -name "example.err" -exec chmod o+r '{}' \;
Tento příkaz vyfiltruje každý objekt v aktuální hierarchii (.) na soubory s názvem rc.conf a spustí příkaz chmod o+r, který upraví práva souborů výsledků příkazu find.
Příklad spustí a provede volbu -exec v kořenovém adresáři procesu find. Použijte -execdir pro spuštění zadaného příkazu v adresáři, kde se nachází shoda. To může zmírnit obavy o bezpečnost a přinést lepší výkon pro některé operace.
Volby -exec nebo -execdir se spustí bez dalších výzev. Pokud dáváte přednost výzvě před provedením akce, nahraďte -exec volbou -ok nebo -execdir volbou -okdir.
Jak najít a odstranit soubory pomocí příkazového řádku Linuxu
Upozornění
Tuto volbu používejte s maximální opatrností.
Přidáním volby -delete na konec výrazu shody odstraníte všechny odpovídající soubory. Tuto možnost použijte, pokud jste si jisti, že výsledky odpovídají pouze souborům, které chcete odstranit.
V níže uvedeném příkladu find rekurzivně vyhledá všechny soubory v hierarchii počínaje aktuálním adresářem a odstraní všechny soubory, které končí příponou .err:
find . -name "*.err" -delete
Stále máte několik otázek?
Připojte se k naší komunitě a napište své dotazy, aby vám ostatní nadšenci Linode a Linuxu mohli pomoci.
Související otázky: