Jak najít soubory a adresáře v Linuxu

V operačních systémech Linux lze příkaz find použít k vyhledávání souborů a adresářů v počítači. Chcete-li pokračovat, vyberte odkaz z následujícího seznamu nebo projděte jednotlivé sekce v pořadí.

Poznámka: Chcete-li použít příkaz find, začněte otevřením relace terminálu, abyste získali přístup k příkazovému řádku.

Základní funkce vyhledávání

Spuštění funkce find without any options vytvoří seznam všech souborů a adresářů v pracovním adresáři a pod ním. Pokud je například váš pracovní adresář / home / hope / Documents, spustí se vyhledávání a zobrazí se následující:

  • Každý soubor v / home / hope / Documents .
  • Každý podadresář v / home / hope / Documents .
  • Každý soubor v každém z těchto podadresářů.

Podívejme se na to v akci. Nejprve se podívejme na náš pracovní adresář pomocí příkazu pwd:

pwd

 / home / hope / Dokumenty 

Nyní spustíme vyhledávání bez jakýchkoli možností:

nalézt

 . ./images ./images/hp ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG. /images/memes/picard.jpg ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at-hagreds.doc ./ hp-fanfic / dumbledores-lament.doc ./archlinux-2016.02.01-dual.iso 

V tomto příkladu vidíme celkem deset souborů a čtyři podadresáře ve složce Dokumenty a pod ní.

Všimněte si, že výstup začíná jednou tečkou, která představuje pracovní adresář. Spuštění hledání bez možností je stejné jako zadávání, že hledání by mělo začít v pracovním adresáři, jako je tento:

najít.

Výše uvedený příklad je "správný" způsob, jak najít . Pokud se jej pokusíte použít v jiném operačním systému typu UNIX, například FreeBSD, zjistíte, že je nutné zadat adresář, takže je vhodné tuto formu příkazu použít.

Zadání, kde hledat

Chcete-li zobrazit pouze soubory a podadresáře obsažené v adresáři / home / hope / Documents / images, zadejte je jako první argument příkazu:

find / home / hope / Dokumenty / obrázky

 / home / hope / Dokumenty / images / home / hope / Dokumenty / images / hp /home/hope/Documents/images/hp/snape.jpg /home/hope/Documents/images/hp/harry.jpg / home / hope / / Dokumenty / images / memes /home/hope/Documents/images/memes/winteriscoming.jpg /home/hope/Documents/images/memes/goodguygary.JPG /home/hope/Documents/images/memes/picard.jpg 

Všimněte si, že úplná cesta je také zobrazena ve výsledcích.

Pokud je náš pracovní adresář / home / hope / Documents, můžeme použít následující příkaz, který najde stejné soubory:

najít ./images

Tentokrát však výstup odráží počáteční umístění vyhledávání a vypadá takto:

 ./images ./images/hp ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG. /images/memes/picard.jpg 

Ve výchozím nastavení bude vyhledávání vypadat v každém podadresáři výchozího umístění. Pokud chcete omezit, kolik úrovní podadresáře chcete prohledat, můžete použít volbu -maxdepth s číslem.

Například zadáním -maxdepth 1 se bude hledat pouze v adresáři, kde začíná vyhledávání. Pokud jsou nalezeny nějaké podadresáře, budou uvedeny, ale nebudou prohledány.

najít. -maxdepth

 . ./images ./bigfiles.txt ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./archlinux-2016.02.01-dual.iso 

Zadání -maxdepth 2 bude prohledávat adresář a jeden hluboký podadresář:

najít. -maxdepth

 . ./images ./images/hp ./images/memes ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at- hagreds.doc ./hp-fanfic/dumbledores-lament.doc ./archlinux-2016.02.01-dual.iso 

Zadání -maxdepth 3 bude hledat o jednu úroveň hlouběji než:

najít. -maxdepth

 . ./images ./images/hp ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG. /images/memes/picard.jpg ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at-hagreds.doc ./ hp-fanfic / dumbledores-lament.doc ./archlinux-2016.02.01-dual.iso 

Hledání podle jména

Chcete-li omezit výsledky vyhledávání tak, aby odpovídaly pouze souborům a adresářům, které mají určitý název, použijte volbu -name a vložte název do uvozovek:

najít. - jméno "picard.jpg"

 ./images/memes/picard.jpg 

Jako součást názvu souboru můžete také použít zástupné znaky. Chcete-li například najít všechny soubory, jejichž jméno končí v souboru .jpg, můžete použít hvězdičku k zobrazení zbytku názvu souboru. Když spustíte příkaz, shell bude globovat název souboru do čehokoliv, co odpovídá vzoru:

najít. -jméno * .jpg

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/picard.jpg 

Všimněte si, že náš příkaz nevypsal soubor, jehož přípona ( JPG ) je velkými písmeny. To je proto, že na rozdíl od jiných operačních systémů, jako je Microsoft Windows, názvy souborů Linux rozlišují velká a malá písmena.

Chcete-li místo toho provést vyhledávání nerozlišující velká a malá písmena, použijte volbu -iname :

najít. -iname "* .jpg"

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg 

Vyhledání pouze souborů nebo pouze adresářů

Chcete-li zobrazit pouze soubory a vynechat názvy adresářů z výsledků, zadejte -typ f :

najít. -typ f

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg ./gimp-2.8 .16.tar.bz2 ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at-hagreds.doc ./hp-fanfic/dumbledores-lament.doc ./archlinux-2016.02.01-dual .iso 

Chcete-li zobrazit pouze seznam adresářů a vynechat názvy souborů, zadejte -type d :

najít. typ d

 . ./images ./images/hp ./images/memes ./hp-fanfic 

Hledání souborů na základě velikosti

Chcete-li zobrazit pouze soubory určité velikosti, můžete použít volbu -size . Pro určení velikosti použijte znaménko plus nebo mínus (pro "více než" nebo "méně než"), číslo a kvantitativní příponu, jako je k, M nebo G.

Chcete-li například najít soubory větší než 50 kilobajtů, použijte -size + 50k :

najít. - velikost + 50k

 ./images/memes/winteriscoming.jpg ./gimp-2.8.16.tar.bz2 ./archlinux-2016.02.01-dual.iso 

Pro soubory větší než 10 megabajtů použijte -size + 10M :

najít. -size + 10M

 ./gimp-2.8.16.tar.bz2 ./archlinux-2016.02.01-dual.iso 

Pro "větší než 1 gigabajt" použijte -size + 1G :

najít. -size + 1G

 ./archlinux-2016.02.01-dual.iso 

U souborů v určitém rozsahu velikostí použijte dvě možnosti velikosti. Chcete-li například najít soubory "větší než 10 megabajtů, ale menší než 1 gigabajt", zadejte -size + 10M-velikost -1G :

najít. - velikost + 10 M - velikost -1G

 ./gimp-2.8.16.tar.bz2 

Hledání souborů na základě změny, přístupu nebo změny stavu

Volba -mtime omezuje hledání podle počtu dní od změny obsahu souboru. Chcete-li určit dny v minulosti, použijte záporné číslo. Chcete-li například najít pouze soubory, které byly upraveny v posledních dvou dnech (před 48 hodinami), použijte -mtime -2 :

najít. -mtime -2

Volba -mmin dělá totéž, ale v termínech minut, ne dnů. Tento příkaz například zobrazuje pouze soubory upravené za posledních půl hodiny:

najít. -mmin -30

Podobná volba je -ctime, která kontroluje, kdy byl stav souboru naposledy změněn, měřeno ve dnech. Změna stavu je změna metadat souboru. Změna oprávnění souboru je například změna stavu.

Volba -cmin bude hledat změnu stavu měřenou v minutách.

Můžete také vyhledat, kdy byl naposledy použit soubor - jinými slovy, když byl jeho obsah naposledy prohlížen. Volba -atime se používá k vyhledávání souborů na základě jejich posledního času přístupu, měřeno ve dnech.

Volba -amin provede stejné omezení vyhledávání, ale bude měřeno v minutách.

Přesměrování výstupu na textový soubor

Pokud provádíte velmi rozsáhlé vyhledávání, můžete výsledky vyhledávání uložit do souboru, abyste mohli výsledky zobrazit později. Můžete to provést přesměrováním svého vyhledávacího výstupu na soubor:

najít. -iname "* .jpg"> images.txt

Výsledky pak můžete otevřít v textovém editoru nebo je vytisknout pomocí příkazu cat .

cat images.txt

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg 

Alternativně můžete svůj výstup napojit na příkaz tee, který vytiskne výstup na obrazovku a zapíše jej do souboru:

najít. -size + 500M | tee bigfiles.txt

 ./archlinux-2016.02.01-dual.iso 

cat bigfiles.txt

 ./archlinux-2016.02.01-dual.iso 

Potlačení chybových zpráv

Při provádění hledání se může zobrazit chybová zpráva "Oprávnění odepřeno". Pokud například prohledáváte kořenový adresář jako normální uživatel:

najít /

 find: `/ var / lib / sudo / ts ': Oprávnění bylo odmítnuto najít:` / var / lib / sudo / lectured': Oprávnění bylo odmítnuto najít: `/ var / lib / polkit-1 ': Oprávnění bylo odmítnuto najít:` / var / lib / container ': Oprávnění bylo odepřeno najít: `/var/lib/gdm3/.dbus': Oprávnění bylo odmítnuto najít:` /var/lib/gdm3/.config/ibus ': Oprávnění bylo odepřeno ... 

Tato chybová zpráva se zobrazí, pokud se hledání pokusí o přístup k souboru, ke kterému nemá uživatelský účet oprávnění ke čtení. Vyhledávání můžete provést jako superuživatel ( root ), který má úplný přístup ke každému souboru v systému. Nedoporučuje se však dělat věci jako root, pokud neexistují žádné jiné možnosti.

Pokud vše, co potřebujete udělat, je skrýt zprávy "Oprávnění odepřeno", můžete přidat 2 &> 1 | grep -v "Oprávnění bylo odepřeno" až do konce vašeho příkazu, jako je tento:

find / 2> & 1 | grep -v "Oprávnění bylo odepřeno"

Výše uvedený příklad filtruje zprávy „Oprávnění odepřeno“ z vašeho vyhledávání. Jak?

2> & 1 je speciální přesměrování, které odesílá chybové zprávy do standardního výstupu, aby spojilo kombinované řádky výstupu s příkazem grep . grep -v pak provede inverzní zápas na "Oprávnění odepřen", zobrazující pouze řádky, které tento řetězec neobsahují.

Přesměrování a použití grep k filtrování chybových zpráv je užitečná technika, když "Oprávnění odepřeno" je nepořádek ve výsledcích vyhledávání a nemůžete provést vyhledávání jako root.

Příklady

najít ~ /. -name "* .txt" -amin -120

Vyhledejte všechny soubory ve vašem domovském adresáři a pod kterým končí přípona " .txt ". Zobrazit pouze soubory přístupné v posledních dvou hodinách.

najít. -name "* .zip" -size + 10M -mtime -3

Vyhledejte všechny soubory v pracovním adresáři a pod jejichž názvem má příponu " .zip " a jejichž velikost je větší než 10 megabajtů. Zobrazit pouze soubory, jejichž obsah byl upraven za posledních 72 hodin.

najít. -iname "* report *" -typ f -maxdepth 2

Proveďte vyhledávání v souborech, které obsahují slovo " sestava " ve svém názvu. Pokud hledání najde ve svém názvu adresář s „reportem“, nezobrazte jej. Vyhledávejte pouze v pracovním adresáři a pod ním adresářovou úroveň.

find / -name "* init *" 2> & 1 | grep -v "Oprávnění bylo odepřeno" | tee ~ / initfiles.txt

Najít všechny soubory v systému, jehož název obsahuje " init ", potlačení chybových zpráv. Zobrazení výsledků na obrazovce a jejich výstup do souboru v domovském adresáři s názvem " initfiles.txt ".