Jak najít soubory v Linuxu pomocí příkazového řádku

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

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 procesu find.
  • Atribut starting/path definuje adresář nejvyšší úrovně, ve kterém find 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říkazu find bylo možné vygenerovat podobný výstup jako v příkladu výše pomocí příkazu xargs:

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:

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.