RetroFed Forum
Your home away from modern life.
Linux question: I like to browse using ls. Than when I find what I'm looking for, I would like to directly move there with cd without having to retype the path. Is there an elegant solution for that?
Post Reply
AuthorMessage
abbadon420 sh.itjust.works abbadon420@sh.itjust.works
Joined: 2025-06-28
Quote

Maybe there is a tool that does that? Maybe I'm doing this all wrong and there is a different way I should browse?

125   Original
∟⊔⊤∦∣≶ lemmy.nz luthis@lemmy.nz
Joined: 2023-06-29
#2 · Quote Reply

Just change the ls to cd?

3
ccunning lemmy.world ccunning@lemmy.world
Joined: 2023-06-01
#3 · Quote Reply

You mean something like this?
ls /your/long/path/name
cd !$

123
tal lemmy.today tal@lemmy.today
Joined: 2023-10-04
#4 · Quote Reply

If you're using bash and haven't modified the readline default, which is to use emacs keystrokes:

$ ls foo/bar/baz

Just what I wanted!

Control-P Control-A Alt-D cd Enter

5
valar lemmy.ca valar@lemmy.ca
Joined: 2026-04-02
#5 · (edited) Quote Reply

You mean something like this? ls /your/long/path/name cd !$

To add,

!$ gets replaced with the last word from the previous command line

!! Repeats the most recent command

!-N Repeats the Nth previous command

!string Repeats the most recent command that began with 'string'

112
ccunning lemmy.world ccunning@lemmy.world
Joined: 2023-06-01
#6 · Quote Reply

To add, !$ gets replaced with the last word from the previous command line !! Repeats the most recent command !-N Repeats the Nth previous command !string Repeats the most recent command that began with 'string'

Huh - TIL about !-N

Thanks 🙏

2
village604 adultswim.fan village604@adultswim.fan
Joined: 2025-09-27
#7 · Quote Reply

To add, !$ gets replaced with the last word from the previous command line !! Repeats the most recent command !-N Repeats the Nth previous command !string Repeats the most recent command that began with 'string'

I just learned more about Linux than I did from my whole IT degree.

52
scrion lemmy.world scrion@lemmy.world
Joined: 2023-11-07
#8 · (edited) Quote Reply

  1. You could start by typing cd and use tab completion to explore your target folder(s). This would require at least a rudimentary knowledge of what you're looking for so you can prefix your search

  2. If you really want to explore the contents and pick your target without knowing anything in advance, cd "$(find . -type d | fzf)" would give you a smart browser. You can of course replace '.' with any base directory you like. Requires fzf.

  3. In general, zoxide can help with navigation.

  4. If you want to stay a purist, I'd go for simply recalling your last ls command from the history and replacing it with cd. An example has been given in the thread already.

3
HubertManne piefed.social HubertManne@piefed.social
Joined: 2025-03-13
#9 · Quote Reply

so you have better answers but still going to do mine. up arrow and change ls to cd.

31
quarrel4you piefed.social quarrel4you@piefed.social
Joined: 2026-02-26
#10 · Quote Reply

You may want to learn about the shell's "history expantion" functions. as an example:

~$ ls ~/Documents/taxes/tax_year_2012/2012-12-01.txt  
/home/tom/Documents/taxes/tax_year_2012/2012-12-01.txt  

~$ cd !!$:h  
cd ~/Documents/taxes/tax_year_2012  

~/Documents/tax_2012$ pwd  
/home/tom/Documents/taxes/tax_year_2012  

Here the string "!!$:h" is basically the last command's [ !! ] last argument [$], stripped of its last path component [:h].

27
LifeInMultipleChoice lemmy.dbzer0.com LifeInMultipleChoice@lemmy.dbzer0.com
Joined: 2024-08-12
#11 · Quote Reply

Just change the ls to cd?

The way they had it worded I figured they meant they wanted to go ls /mnt/drive/backups/2017/03/19/documents/taxes/w2s

Then type cd !$ so they don't have to type all of that again instead of copy/pasting or pressing the up key and then holding the left button to get back and delete the ls.

5
BonkTheAnnoyed piefed.blahaj.zone BonkTheAnnoyed@piefed.blahaj.zone
Joined: 2026-01-23
#12 · Quote Reply

If you're using bash and haven't modified the readline default, which is to use emacs keystrokes: $ ls foo/bar/baz Just what I wanted! Control-P Control-A Alt-D cd Enter

absolutely brilliant

You know, I always kind of wondered what happened when I accidentally pressed control C, control V or whatnot in bash.

Level unlocked

3
quarrel4you piefed.social quarrel4you@piefed.social
Joined: 2026-02-26
#13 · Quote Reply

You mean something like this? ls /your/long/path/name cd !$

I like the way you think! Too bad a I replied to a seaming empty post some 26 min after you. I always disliked this about Reddit. Seeing someone rewording the top reply for karma.

3
m-p{3} lemmy.ca mp3@lemmy.ca
Joined: 2023-07-01
#14 · Quote Reply

To add, !$ gets replaced with the last word from the previous command line !! Repeats the most recent command !-N Repeats the Nth previous command !string Repeats the most recent command that began with 'string'

!! is the goat when you needed to run the last command using sudo

35
ccunning lemmy.world ccunning@lemmy.world
Joined: 2023-06-01
#15 · Quote Reply

!! is the goat when you needed to run the last command using sudo

💯

10
abbadon420 sh.itjust.works abbadon420@sh.itjust.works
Joined: 2025-06-28
#16 · Quote Reply

so you have better answers but still going to do mine. up arrow and change ls to cd.

Yeah, thats what I was doing,but I was hoping for something more elegant haha

10
notabot piefed.social notabot@piefed.social
Joined: 2025-06-04
#17 · Quote Reply

Type cd then press Alt+. and it'll copy the last argument of the previous command, make sure it's what you want, and press Enter.

21
palordrolap fedia.io palordrolap@fedia.io
Joined: 2024-08-13
#18 · Quote Reply

The soft option perspective (I see plenty of command-line-only solutions here already):

These days, if I'm doing any major navigation, I do it the uncool way and use the GUI file manager bundled with my distro. I have the option enabled to show the "open a terminal at this location" button if I really want to start issuing commands.

If you'd rather stay on the command line, a compromise might be to use something like Midnight Commander. Back in my DOS days I used to use an equivalent there on a regular basis, but that's because I hadn't launched Windows and didn't feel like it was necessary to do what I wanted. (It was possible to patch Win 9x to behave like earlier Win 3.x so that it stopped at the DOS prompt and didn't load Windows, which fit my aesthetic at the time.)

These days I prefer my comforts and I sure as heck don't boot Linux to a command line unless something's really wrong!

3
NeatNit discuss.tchncs.de NeatNit@discuss.tchncs.de
Joined: 2024-01-05
#19 · (edited) Quote Reply

What I do is: Up, Home, type cd , Delete (hold/repeat as many times as needed), Enter.

The Home key instantly brings your cursor to the start of the command line (before the ls), even if the command is long enough to wrap.

I'm not a terminal guru, and I don't aspire to become one. I don't want to memorize arcane symbols that each has a subtly different meaning, and I especially don't want to execute them before I see explicitly what they're going to do. So while the top comment of cd !$ is a perfectly good and correct answer, I offer this alternative in case you, like me, like to see what you're doing as you do it. Home and End are pretty good.

10
usernameunnecessary lemmy.zip usernameunnecessary@lemmy.zip
Joined: 2024-04-04
#20 · (edited) Quote Reply

Yeah, thats what I was doing,but I was hoping for something more elegant haha
^ls^cd

will do exactly what you want, replace ls with cd from the previously run command

10
tal lemmy.today tal@lemmy.today
Joined: 2023-10-04
#21 · Quote Reply

absolutely brilliant You know, I always kind of wondered what happened when I accidentally pressed control C, control V or whatnot in bash. Level unlocked

Well...Control-C is treated by bash differently than in emacs. It basically cancels the existing line and gives you a fresh line.

And IIRC, Control-V is also different, used to input literal control characters. Like, the terminal will handle that if it's in cooked mode.

checks

$ od -x

hits Control-V Control-C Enter Control-D

^C

0000000 0a03
0000002
$

Yeah.

Control-U is also a notable difference I know off-the-cuff. In emacs, it's the universal-argument prefix, which is an important way to pass arguments to functions. In readline, it's kill-to-beginning-of-line.

1
abbadon420 sh.itjust.works abbadon420@sh.itjust.works
Joined: 2025-06-28
#22 · Quote Reply

What I do is: Up, Home, type cd , Delete (hold/repeat as many times as needed), Enter. The Home key instantly brings your cursor to the start of the command line (before the ls), even if the command is long enough to wrap. I'm not a terminal guru, and I don't aspire to become one. I don't want to memorize arcane symbols that each has a subtly different meaning, and I especially don't want to ex...

I had already found ctrl+a that brings me back to the front of the line. It's bit more convenient for my hands than home.

6
abbadon420 sh.itjust.works abbadon420@sh.itjust.works
Joined: 2025-06-28
#23 · Quote Reply

To add, !$ gets replaced with the last word from the previous command line !! Repeats the most recent command !-N Repeats the Nth previous command !string Repeats the most recent command that began with 'string'

I'm loving this

6
Raja lemmy.world Raja@lemmy.world
Joined: 2023-06-26
#24 · Quote Reply

You mean something like this? ls /your/long/path/name cd !$

In some shells (e.g. fish), "running" a directory changes to it so you can save keystrokes and just delete the "ls ".

3
NeatNit discuss.tchncs.de NeatNit@discuss.tchncs.de
Joined: 2024-01-05
#25 · Quote Reply

I had already found ctrl+a that brings me back to the front of the line. It's bit more convenient for my hands than home.

I have a really strong muscle memory for Home so it's super convenient to me, but ctrl+a sounds just as good.

5
usernameunnecessary lemmy.zip usernameunnecessary@lemmy.zip
Joined: 2024-04-04
#26 · Quote Reply

In addition to

^ls^cd

I mentioned in another comment, I highly recommend you try "z", installable on macos via "brew install z" (not sure if it's available on linux package managers). Suppose you want to jump to ~/Desktop/project1/foo, you can just type "z foo". It works without a full path, from anywhere, as long as you cd'd in there at least once.

4
andyburke fedia.io andyburke@fedia.io
Joined: 2023-06-16
#27 · Quote Reply

I had already found ctrl+a that brings me back to the front of the line. It's bit more convenient for my hands than home.

ctrl-a: beginning of line
ctrl-e: end of line
ctrl-k: delete rest of line from cursor
ctrl-u: delete line before cursor

these are helpful in these situations, as well.

3
tal lemmy.today tal@lemmy.today
Joined: 2023-10-04
#28 · (edited) Quote Reply

The soft option perspective (I see plenty of command-line-only solutions here already): These days, if I'm doing any major navigation, I do it the uncool way and use the GUI file manager bundled with my distro. I have the option enabled to show the "open a terminal at this location" button if I really want to start issuing commands. If you'd rather stay on the command line, a compromise might b...

If you'd rather stay on the command line, a compromise might be to use something like Midnight Commander. Back in my DOS days I used to use an equivalent there on a regular basis, but that's because I hadn't launched Windows and didn't feel like it was necessary to do what I wanted.

Note that this class of file managers (two-pane, Norton Commander-alike) are called "orthodox file managers".

https://en.wikipedia.org/wiki/Category:Orthodox_file_managers

https://softpanorama.org/OFM/index.shtml

My experience is that people out of Eastern Europe in particular seem to have a history of using these.

There are also some non-OFM console file managers, like ranger, which might appeal to vim-folk:

https://github.com/ranger/ranger

Ranger is a console file manager with VI key bindings. It provides a minimalistic and nice curses interface with a view on the directory hierarchy.

I use dired in emacs, which does a number of things similarly to an OFM if you have two panes open (though dired is not itself an OFM, and emacs does have Sunrise Commander, which is an OFM).

Generally, I live in bash, but I find that file managers are handy when you want to manually mark a set of files to run an operation on (like, you can't programmatically identify them).

1
Steve startrek.website Steve@startrek.website
Joined: 2023-10-08
#29 · Quote Reply

Is it uncool to use a GUI?

4
Noctambulist lemmy.world Noctambulist@lemmy.world
Joined: 2025-07-12
#30 · Quote Reply

The way I solve this problem is to use nnn instead of ls. It's a full file manager for the terminal but so light and quickly started that it's as convenient as ls (a lot more so actually). You can navigate around your file system with vim-like key bindings and then have the option to exit either to the directory you started from or the one currently displayed.

9
gole lemmy.zip gole@lemmy.zip
Joined: 2025-06-20
#31 · Quote Reply

For me I replaced cd with https://github.com/ajeetdsouza/zoxide

cd to anywhere from anywhere, don't even need to type the whole thing. Algorithm: https://github.com/ajeetdsouza/zoxide/wiki/Algorithm#matching

8
UnfortunateShort lemmy.world UnfortunateShort@lemmy.world
Joined: 2023-06-19
#32 · Quote Reply

You can hit TAB in any decent shell to autocomplete paths. Personally I highly recommend fish

20
Exec pawb.social Exec@pawb.social
Joined: 2023-06-30
#33 · Quote Reply

To add, !$ gets replaced with the last word from the previous command line !! Repeats the most recent command !-N Repeats the Nth previous command !string Repeats the most recent command that began with 'string'

!!:n where n is the nth word after the command in your last line

cp file1 file2
nano !!:2

Here nano opens file2.

22
valar lemmy.ca valar@lemmy.ca
Joined: 2026-04-02
#34 · Quote Reply

!!:n where n is the nth word after the command in your last line cp file1 file2 nano !!:2 Here nano opens file2.

Love it

6
charokol lemmy.zip charokol@lemmy.zip
Joined: 2026-07-27
#35 · Quote Reply

What I do is: Up, Home, type cd , Delete (hold/repeat as many times as needed), Enter. The Home key instantly brings your cursor to the start of the command line (before the ls), even if the command is long enough to wrap. I'm not a terminal guru, and I don't aspire to become one. I don't want to memorize arcane symbols that each has a subtly different meaning, and I especially don't want to ex...

The seconds I’d save remembering which combination of dollar signs and exclamation points to use would never help me find a better job or otherwise improve my life. I’m okay with the up arrow too.

5
Zarobi aussie.zone Zarobi@aussie.zone
Joined: 2026-06-23
#36 · Quote Reply

I have a really strong muscle memory for Home so it's super convenient to me, but ctrl+a sounds just as good.

Minor addition: I've had some shells where home will bring you back to the beginning of the current line, not the whole command. Ctrl+Home always brings you to the very start of the command if this applies to you

2
Kristell herbicide.fallcounty.omg.lol klymilark@herbicide.fallcounty.omg.lol
Joined: 2026-01-13
#37 · Quote Reply

To add, !$ gets replaced with the last word from the previous command line !! Repeats the most recent command !-N Repeats the Nth previous command !string Repeats the most recent command that began with 'string'

... How have I used Linux for two decades and not run into this once. Amazing stuff

15
t҉̠̙ǵ̣̞̄ͪ͜x̸̱͚̳ͫ͐̑̈ͯͣ̚n̒͌҉͉̦̜̝ͅ lemmy.tgxn.net tgxn@lemmy.tgxn.net
Joined: 2444-05-01
#38 · Quote Reply

The way they had it worded I figured they meant they wanted to go ls /mnt/drive/backups/2017/03/19/documents/taxes/w2s Then type cd !$ so they don't have to type all of that again instead of copy/pasting or pressing the up key and then holding the left button to get back and delete the ls.

You guys dont have Home buttons? No holding left for me.

4
4am lemmy.zip 4am@lemmy.zip
Joined: 2025-06-23
#39 · Quote Reply

To add, !$ gets replaced with the last word from the previous command line !! Repeats the most recent command !-N Repeats the Nth previous command !string Repeats the most recent command that began with 'string'

If !$ isn’t pronounced “ba-ching!” I’m quitting Linux

25
4am lemmy.zip 4am@lemmy.zip
Joined: 2025-06-23
#40 · (edited) Quote Reply

I just learned more about Linux than I did from my whole IT degree.

You learned more about shells than you knew. This stuff works on BSD and some UNIX systems too, you know

20
Hal piefed.nz Hal@piefed.nz
Joined: 2026-09-02
#41 · Quote Reply

!! is the goat when you needed to run the last command using sudo

Hot damn, and here's me thinking thefuck was the way to do this.

10
sin_free_for_00_days sopuli.xyz sin_free_for_00_days@sopuli.xyz
Joined: 2023-07-28
#42 · Quote Reply

Type cd then press Alt+. and it'll copy the last argument of the previous command, make sure it's what you want, and press Enter.

Nice, I don't remember having seen that before. I'm sure I'll just keep using !$, because muscle memory, but I like seeing new approaches.

3
GreyEyedGhost piefed.ca GreyEyedGhost@piefed.ca
Joined: 2025-11-30
#43 · Quote Reply

You learned more about shells than you knew. This stuff works on BSD and some UNIX systems too, you know

Most POSIX-compliant systems?

4
GreyEyedGhost piefed.ca GreyEyedGhost@piefed.ca
Joined: 2025-11-30
#44 · Quote Reply

... How have I used Linux for two decades and not run into this once. Amazing stuff

I've never come across this before, and I am completely unsurprised it exists.

9
🌞 Alexander Daychilde 🌞 lemmy.world daychilde@lemmy.world
Joined: 2023-06-13
#45 · Quote Reply

If !$ isn’t pronounced “ba-ching!” I’m quitting Linux

Better than "bang-ching" which sounds racist to me. lol

11
🌞 Alexander Daychilde 🌞 lemmy.world daychilde@lemmy.world
Joined: 2023-06-13
#46 · Quote Reply

Is it uncool to use a GUI?

Use what you like.

I'm not OP, but I use SSH a lot, meaning I'm very much in a character-based terminal of some sort. :)

3
Openopenopenopen lemmy.world Openopenopenopen@lemmy.world
Joined: 2023-10-30
#47 · (edited) Quote Reply

You mean something like this? ls /your/long/path/name cd !$

I think, if your using bash

alt + .

Does the same thing as typing

!$

ls /super/long/path/to/dir

cd alt + .

I believe if you hit it again, it cycles through all previous last words

https://ostechnix.com/list-useful-bash-keyboard-shortcuts/

8
notabot piefed.social notabot@piefed.social
Joined: 2025-06-04
#48 · Quote Reply

Nice, I don't remember having seen that before. I'm sure I'll just keep using !$, because muscle memory, but I like seeing new approaches.

The shell, and lots of other things that take per-line input, use readline to do it. The readline man page is... extensive... to say the least. There are many more useful shortcuts in there, but I doubt anyone uses more than a fraction of them.

2
khannie lemmy.world khannie@lemmy.world
Joined: 2023-06-21
#49 · Quote Reply

Is it uncool to use a GUI?

Nah not at all, you do you but when you get used to the command line it's generally much faster and offers a lot of power.

3
kik2civeswt1 sh.itjust.works kik2civeswt1@sh.itjust.works
Joined: 2023-09-01
#50 · Quote Reply

There's already some great answers in the thread, so I won't add to those.

Some shortcuts are shell-specific. For example, !!, !:$, and ^old^new are in bash, but not in fish.

Some things, like Alt-. and Ctrl-a, are implemented by readline, which can be used elsewhere, as well, for example in the python interpeter.

Depending on your context, it may be better to invest time learning methods implemented by readline. While not necessarily universal, they are more versatile.

There were heaps of functions I was using not realising they were from readline. For example, Ctrl-r for reverse interactive search, Ctrl-a/e for start/beginning if line, Ctrl-w for deleting a word.

5
gothic_lemons lemmy.world gothic_lemons@lemmy.world
Joined: 2023-06-13
#51 · Quote Reply

You mean something like this? ls /your/long/path/name cd !$

Holy fucking shit. I've dabbled in Linux for so long to not know. Thank you!

4
Post Reply Page 1 of 2   Goto page 1, 2 Last »
Back to top