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 ".