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/path
definuje adresář nejvyšší úrovně, ve kterémfind
začí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
-exec
v příkazufind
bylo 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: