You can use something like:
pax[/home/pax]> cd "$(dirname "$(find / -type f -name ls | head -1)")"
pax[/usr/bin]> _
This will locate the first ls
regular file then change to that directory.
In terms of what each bit does:
- The find will start at
/
and search down, listing out all regular files (-type f
) called ls
(-name ls
). There are other things you can add to find
to further restrict the files you get.
- The piping through
head -1
will filter out all but the first.
$()
is a way to take the output of a command and put it on the command line for another command.
dirname
can take a full file specification and give you the path bit.
cd
just changes to that directory.
If you execute each bit in sequence, you can see what happens:
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]> _