3

I remember reading a trick in a stackoverflow comment somewhere for getting a list of filenames in the terminal, but I can't exactly remember it.

If you have a bunch of files like:

foo-a.txt
foo-b.txt
foo-c.txt

There is a trick that goes something along the lines of:

  1. type cat foo-*
  2. Press something like tab, backspace, esc (this does not work, but is the step I want to know)
  3. The command line should now have cat foo-a foo-b foo-c

Note that is is different to the basic tab completion which shows a list of filenames below the command. This will put all the filenames in the command input so that pressing "enter" will execute cat with all the files.

Can anyone enlighten me?

6
  1. Type cat foo-*
  2. Press Ctrl+X then * (asterisk - Shift+8 on a US keyboard) to expand the glob
    • That's the default shortcut. If it doesn't work, check bind -p | grep glob-expand-word to see if it's set as the default: "\C-x*": glob-expand-word. If it's not, you can set it with bind '"\C-x*": glob-expand-word'.
  3. The command line should now be cat foo-a.txt foo-b.txt foo-c.txt

glob-expand-word vs insert-completions

OP's answer is about insert-completions (Esc, *), which is similar but different to glob-expand-word. glob-expand-word expands filename globs. insert-completions inserts all the possible completions that pressing Tab would show.

So that means you can also use it for things besides filenames, like options. For example type ls --f, press Esc, *, and you will get ls --file-type --format=, though I'm not sure what good that does...

And that means that it behaves differently when expanding filenames or globs. For example if you type cat foo-* and press Esc, *, it will expand to only the first completion: cat foo-a.txt.

  • Thanks, that it! Btw: You can also use esc instead of ctr+x – mdsimmo Feb 3 at 8:59
  • 1
    @mdsimmo Esc, * is a different function actually. I just checked bind -p | grep '\\e\*' and it says "\e*": insert-completions. I'm not clear on the exact difference, but if you type cat * then press Esc, *, it will expand to just the first matching item. – wjandrea Feb 3 at 9:02
3

I found the original comment here. (Can someone with more points upvote him for me? :P)

The sequence is:

  • Type cat foo-
  • Press esc
  • Press * (asterisk)

The same sequence seems to work with any program (not just cat)

  • 1
    Upvoted the comment per request :p (BTW, worth noting that comment upvotes don't count towards reputation points) – wjandrea Feb 3 at 22:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.