Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Richard Stallman přednáší ve středu 7. května od 16:30 na Technické univerzitě v Liberci o vlivu technologií na svobodu. Přednáška je určená jak odborné tak laické veřejnosti.
Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.04.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.
TmuxAI (GitHub) je AI asistent pro práci v terminálu. Vyžaduje účet na OpenRouter.
Byla vydána nová verze R14.1.4 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5, Wikipedie). Přehled novinek i s náhledy v poznámkách k vydání. Podrobný přehled v Changelogu.
Bylo vydáno OpenBSD 7.7. Opět bez písničky.
V Tiraně proběhl letošní Linux App Summit (LAS) (Mastodon). Zatím nesestříhané videozáznamy přednášek jsou k dispozici na YouTube.
find
, který slouží k vyhledávání souborů. Představíme jak standardní verzi, tak GNU rozšíření.find
je velice schopný vyhledávací nástroj, který poslouží jak pro jednoduché vyhledávání na základě názvu souboru, tak pro složité hledání na základě dalších údajů a podmínek. Jeho název vychází z anglického slova, které znamená „najít“.
Na GNU/Linuxu se často setkáte s GNU verzí této utility, která rozšiřuje schopnosti programu mimo rozsah standardu.
Základní použití programu vypadá takto:
# vypíše všechny soubory a adresáře v domovském adresáři (rekurzivně) find ~/ # najde v aktuálním pracovním adresáři všechny soubory a adresáře s názvem končícím na „.pdf“ find -name '*.pdf'
Jak vidíte, pomocí přepínače -name
lze vyhledávat soubory na základě (části) jejich názvu. Název adresáře, ve kterém chceme hledat, zadáváme vždy jako první (pokud jej vynecháme, použije se pracovní adresář). Předvedeme si, jak vyhledávat podle jiných kritérií, než je název souboru.
# vyhledá všechny symbolické odkazy v adresáři /tmp find /tmp -type l # vyhledá všechny adresáře a soubory s oprávněním 755 v nadřazeném adresáři find .. -perm 755 # vyhledá všechny soubory patřící uživateli „dave“ a skupině „home“ find -type f -user dave -group home
Jak je vidět na poslední ukázce, kritéria vyhledávání lze kombinovat. Zadáte-li je takto za sebou, find
bude hledat položky odpovídající všem kritériím. Jenže co když nám jde o to najít vše kromě položek splňujících dané kritérium? A co když chceme najít soubor, který splňuje buď jedno, anebo jiné kritérium? I toto find
zvládá a my si ukážeme jak na to. Přepínač -o představuje logický OR („nebo“), takže stačí, když platí výraz před tímto přepínačem nebo za ním, aby daný soubor odpovídal kritériím vyhledávání.
# vyhledá adresáře, které mají oprávnění 777 nebo patří uživateli „dave“ (nebo splňují obě podmínky) find -type d -perm 777 -o -user dave # vyhledá vše kromě obyčejných souborů find ! -type f # vyhledá soubory, které patří uživateli „dave“, a zároveň „adresáře“ s oprávněním 775 a skupinou jinou než „home“ find '(' -type f -user dave ')' -o \( -type d -perm 775 ! -group home \) # najde soubory s příponou .pdf či .ps find -type f -name '*.pdf' -o -name '*.ps'
Na ukázce jsem předvedl, že je možné používat i priority (závorky), které známe z matematiky nebo programování. Je však nutné je escapovat přidáním zpětného lomítka před závorku nebo je umístit mezi uvozovky či apostrofy. Je to nutné z toho důvodu, že jinak by shell interpretoval závorky po svém, přičemž takto je předá programu. Vykřičník slouží k negaci výrazu.
Teď si předvedeme jeden ze způsobů, jak pro každý nalezený soubor vyhovující daným kritériím spustíme program, kterému předáme název souboru jako argument. Ukázka převede všechny nalezené MP3 soubory na WAV pomocí programu lame
.
# vypisuje pouze výstup programu lame find -type f -name '*.mp3' -exec lame --decode "{}" \; # lame nic nevypisuje, pouze find vypisuje názvy souborů, když jsou zpracovávány find -type f -name '*.mp3' -exec lame --decode --silent "{}" + -print
Používá se tedy přepínač -exec
, za který napíšeme příkaz, který chceme spustit, i s argumenty, přičemž řetězec {}
je před spuštěním nahrazen za název souboru, který by byl jinak právě vypsán na výstup. Konec příkazu značíme středníkem, který musí být escapovaný, jinak by jej shell bral jako ukončení příkazu. V případě, že ukončujeme argumenty hned za uvedením {}
, můžeme místo středníku použít znak „+“. V ostatních případech znak plus není nijak zvláštně zpracováván.
Chceme-li být opatrnější, můžeme místo -exec
použít -ok
, který se před každým spuštěním příkazu nejdříve zeptá, zda jej chcete skutečně spustit. Přepínač -ok
nemusí podporovat ukončování pomocí znaku „+“ (např. GNU verze to nepodporuje), proto je lepší používat „;“.
Ukážeme si ještě, jak vyhledávat podle několika dalších kritérií. Nejdříve dle velikosti souborů pomocí přepínače -size
.
# hledá soubory větší než 500 bytů (chceme-li vyhledávat v bytech, za číslo přidáme znak "c") find / -type f -size +500c # vyhledá soubory velké přesně 2 kB find .. -type f -size 2048c # vyhledá soubory menší než 10 MB find adresář/ -type f -size -10485760c
Vyhledávat lze i podle času poslední změny (pomocí -mtime
), času vytvoření (-ctime
) a času posledního přístupu k souboru (-atime
). Těmto přepínačům předáváme počet dní (od doby spuštění příkazu). Pokud před tento počet dní n připojíme „+“, znamená to „více než n dní“ a opak platí pro „-“, podobně jako u přepínače -size
.
# hledá soubory naposledy změněné před více než deseti dny find -type f -mtime +10 # hledá adresáře vytvořené před méně než dvěma týdny find -type d -ctime -14
Ještě lze využít přepínač -newer
, kterému se předává soubor, jehož čas poslední změny se použije jako referenční pro vyhledávání souborů novějších, než je ten daný.
# hledá soubory a adresáře s časem posledním změny pozdějším, než má „soubor.txt“ find -newer soubor.txt
Chceme-li vyhledat soubory či adresáře, které mají neplatné UID nebo GID (vlastníka či skupinu), použijeme přepínače -nouser
a/nebo nogroup
.
# vyhledá všechny soubory či adresáře bez platného vlastníka či skupiny find -nouser -o -nogroup
Měl bych zmínit přepínač -H
, který mění chování programu při rekurzivním průchodu adresářů. Bez tohoto přepínače nebo s -L
, což je výchozí chování, find
nenásleduje symbolické odkazy, přičemž s -H
ano. Máte-li tedy adresář, který obsahuje tři soubory a jeden symbolický odkaz na jiný adresář, find -H
prohledá i adresář, na který odkaz směřuje.
Běžně se find
nejdříve zpracuje explicitně zadaný adresář (nebo „.“, pokud nebyl žádný zadán) a teprve potom teprve jeho obsah. Chceme-li z nějakého důvodu, aby tomu bylo naopak, můžeme použít přepínač -depth
.
Jak jsem již zmínil, implementace od GNU obsahuje poměrně mnoho rozšíření, které standard neuvádí. Podíváme se na několik z nich.
Často se nám může hodit vyhledávání podle názvu souboru, přičemž nezáleží na velikosti písmen. Toho lze docílit přepínačem -iname
.
Chceme-li nalezené položky rovnou mazat, můžeme zadat přepínač -delete
.
Pro ovlivnění rekurze lze použít přepínače -mindepth
(minimální hloubka) a -maxdepth
(maximální hloubka).
# vyhledává pouze v adresáři aktuálním a jeho podadresářích, ale dále nezajde find -mindepth 1 -maxdepth 2
Přepínač -execdir
je podobný jako -exec
, ale spouští příkaz z adresáře, ve kterém se nachází daný soubor či adresář.
Chceme-li, aby find
vypisoval názvy souborů oddělené znakem NULL (\0), což se hodí některým externím utilitám (například xargs
s přepínačem -0), předáme přepínač -print0
.
Přepínačem -size
lze zadávat velikost v příhodnějších jednotkách, než jsou byty.
# hledá soubory větší než 1 GB find -type f -size +1G
Komplexnějšího vyhledávání na základě názvů souborů lze docílit použitím regulárních výrazů. Daný výraz zadáme přepínači -regex
a typ regulárního výrazu můžeme zvolit přepínačem -regextype
.
find
toho umí ještě mnohem více, můžete se o tom přesvědčit sami při čtení manuálové stránky.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
Název adresáře, ve kterém chceme hledat, zadáváme vždy jako první (pokud jej vynecháme, použije se pracovní adresář).To vynechání je AFAIK právě GNU rozšíření a pokud nemáte GNU tak bude find kousat. Jinak pointa je v tom, že těch cest může být jedna a více.
find /bin /usr/bin -name find
V případě, že ukončujeme argumenty hned za uvedením {}, můžeme místo středníku použít znak „+“.Tady by se hodilo říci, že plus mění postup volání programu:
find /bin -exec prog '{}' ';' => prog /bin/bash prog /bin/cp ...
find /bin -exec prog '{}' '+' => prog /bin/bash /bin/cp ...Hodilo by se srovnání s
-execdir
.
Dále by se hodilo vysvětlit co je to -print
, -printf
a -print0
. A že -print
je default. To -print0
tam sice máte ale není z toho člověk moc moudrý.
#!/bin/sh find . -name "$1"Používám ho denně, například:
git add `sifi HlubokoVBalíčcíchPohřbenýSoubor.java` xdg-open `sifi HlubokoVBalíčcíchPohřbenýSoubor.java`
git add **/HlubokoVBalíčcíchPohřbenýSoubor.java xdg-open **/HlubokoVBalíčcíchPohřbenýSoubor.javaNení to lepší? (Nějaký novější bash to už prý umí také)
find -depth -mindepth 1 -maxdepth 5 \( -type f -o -type l \) \( -name '*.docx' -o -iname '*.doc' \) -delete
Oveľa lepšie je: - napísať si kratší find * s pár parametrami * jeho výsledok: 1) prochádzať v cykle 2) vypísať si medzivýsledky!
ls -lR | grep foojednodušší než
find . -name '*foo*'ale chápu že to může chápat někdo jiný :)
find
tedy bude pracovat s tím klasickým vlastníkem a skupinou, ale nebude umět třeba vypsat jen soubory, ke kterým má v ACL nastavená práva určitá skupina.
find -iname *.pdf
a find -iname '*.pdf'
Na dotaz s temi apostrofy mi to vrati vice vysledku, ale nechapu proc.
Muzete mi to nekdo prosim vysvetlit ?
find
je opravdu čistě GNU/Linuxová záležitost. Na ostatních UNIXových či UNIX-like systémech se chová naprosto jinak a spoustu věcí neumí.
Pokud chcete psát cross-platform skripty, je lepší se find
u vyhnout.
Nekamenujte mě. Píšu to jen proto, že seriál se jmenuje Unixové nástroje, nikoli Linuxové nástroje.
Jinak uznávám, že GNU verze je prostě nejlepší a preferuju ji. Bohužel né všude je k dispozici… iconv
em soubor z jednoho kódování do toho samého a tak podobně. Upravit skript tak, aby mu tyto drobnosti nevadily, je v pohodě. V případě find
u je to kolikrát major redesign (a následný major rewrite).