Následující by mělo být bezpečnější:
cd -- "$(find / -name ls -type f -printf '%h' -quit)"
Výhody:
- Dvojitá pomlčka brání interpretaci názvu adresáře začínajícího pomlčkou jako možnost (
find
nevytváří takové názvy souborů, ale není škodlivý a může být vyžadován pro podobné konstrukce) -name
zkontrolujte před-type
zaškrtněte, protože ten někdy vyžadujestat
- Ne
dirname
vyžadováno, protože%h
specifier již vypisuje název adresáře -quit
pro zastavení hledání po prvním nalezeném souboru, tedy žádnéhead
což by způsobilo selhání skriptu u názvů adresářů obsahujících nové řádky
Můžete použít něco jako:
pax[/home/pax]> cd "$(dirname "$(find / -type f -name ls | head -1)")"
pax[/usr/bin]> _
Tím se najde první ls
běžný soubor a poté přejděte do tohoto adresáře.
Z hlediska toho, co každý bit dělá:
- Nález začne na
/
a prohledejte seznam všech běžných souborů (-type f
) s názvemls
(-name ls
). Dofind
můžete přidat další věci k dalšímu omezení souborů, které získáte. - Potrubí přes
head -1
odfiltruje všechny kromě prvního. $()
je způsob, jak vzít výstup příkazu a vložit jej na příkazový řádek pro další příkaz.dirname
může převzít úplnou specifikaci souboru a poskytnout vám bit cesty.cd
pouze změní tento adresář.
Pokud provedete každý bit v sekvenci, uvidíte, co se stane:
pax[/home/pax]> find / -type f -name ls
/usr/bin/ls
pax[/home/pax]> find / -type f -name ls | head -1
/usr/bin/ls
pax[/home/pax]> dirname "$(find / -type f -name ls | head -1)"
/usr/bin
pax[/home/pax]> cd "$(dirname "$(find / -type f -name ls | head -1)")"
pax[/usr/bin]> _
Jak nastavit úlohu cron, aby každou hodinu spouštěla spustitelný soubor?
Jak mohu získat stav klávesnice v Linuxu?