Open a doc from terminal, but not by its name The Next CEO of Stack OverflowHow do I enter a file or directory with special characters in its name?Accidentally created directory named “~” (tilde)How to open a directory with spaces in its name from the terminal?Opening a file from terminalHow to set default terminal to tilda or yakuake when using “Open in terminal” from folderOpening a file from terminal only by typing its namehow to go to a directory in gnome terminal which contains spaces as its name?How to write the path of a folder with space in its name?Ubuntu Terminal, what is its executable name?How can I cd to a directory without writing its name?giving a short name for frequently opened directory via terminalOpen a sub-directory using something rather than its name

Extracting names from filename in bash

Help understanding this unsettling image of Titan, Epimetheus, and Saturn's rings?

What can we do to stop prior company from asking us questions?

Would a galaxy be visible from outside, but nearby?

If/When UK leaves the EU, can a future goverment do a referendum to join EU

Anatomically Correct Strange Women In Ponds Distributing Swords

How to start emacs in "nothing" mode (`fundamental-mode`)

Are there languages with no euphemisms?

Complex fractions

Tiptoe or tiphoof? Adjusting words to better fit fantasy races

Was a professor correct to chastise me for writing "Prof. X" rather than "Professor X"?

Does the Brexit deal have to be agreed by both Houses?

At which OSI layer a user-generated data resides?

Hindi speaking tourist to UK from India

How to make a software documentation "officially" citable?

How to make a variable always equal to the result of some calculations?

Why do remote companies require working in the US?

Rotate a column

Customer Requests (Sometimes) Drive Me Bonkers!

What does this shorthand mean?

Why doesn't a table tennis ball float on a surface of steel balls? How do we calculate buoyancy here?

What happens if you roll doubles 3 times then land on "Go to jail?"

How to write the block matrix in LaTex?

Why do professional authors make "consistency" mistakes? And how to avoid them?



Open a doc from terminal, but not by its name



The Next CEO of Stack OverflowHow do I enter a file or directory with special characters in its name?Accidentally created directory named “~” (tilde)How to open a directory with spaces in its name from the terminal?Opening a file from terminalHow to set default terminal to tilda or yakuake when using “Open in terminal” from folderOpening a file from terminal only by typing its namehow to go to a directory in gnome terminal which contains spaces as its name?How to write the path of a folder with space in its name?Ubuntu Terminal, what is its executable name?How can I cd to a directory without writing its name?giving a short name for frequently opened directory via terminalOpen a sub-directory using something rather than its name










16















Is it possible to open a file from the terminal not by its name but by its (number) position in the folder? Or any other option?



Because the name is too long.










share|improve this question



















  • 4





    Please edit and give an example of what you want to do.

    – dessert
    Mar 22 at 8:50






  • 6





    No, not without coding it. But you can use "tab" completion.

    – Rinzwind
    Mar 22 at 8:51







  • 2





    Too long for what?

    – Carl Witthoft
    Mar 22 at 11:59






  • 1





    Have you tried typing the first two or three letters of the file name and then pressin the Tab key?

    – Henrique
    Mar 22 at 20:33















16















Is it possible to open a file from the terminal not by its name but by its (number) position in the folder? Or any other option?



Because the name is too long.










share|improve this question



















  • 4





    Please edit and give an example of what you want to do.

    – dessert
    Mar 22 at 8:50






  • 6





    No, not without coding it. But you can use "tab" completion.

    – Rinzwind
    Mar 22 at 8:51







  • 2





    Too long for what?

    – Carl Witthoft
    Mar 22 at 11:59






  • 1





    Have you tried typing the first two or three letters of the file name and then pressin the Tab key?

    – Henrique
    Mar 22 at 20:33













16












16








16


7






Is it possible to open a file from the terminal not by its name but by its (number) position in the folder? Or any other option?



Because the name is too long.










share|improve this question
















Is it possible to open a file from the terminal not by its name but by its (number) position in the folder? Or any other option?



Because the name is too long.







command-line files directory






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Mar 23 at 6:55









Sergiy Kolodyazhnyy

74.7k9155325




74.7k9155325










asked Mar 22 at 8:47









yh yeahyh yeah

873




873







  • 4





    Please edit and give an example of what you want to do.

    – dessert
    Mar 22 at 8:50






  • 6





    No, not without coding it. But you can use "tab" completion.

    – Rinzwind
    Mar 22 at 8:51







  • 2





    Too long for what?

    – Carl Witthoft
    Mar 22 at 11:59






  • 1





    Have you tried typing the first two or three letters of the file name and then pressin the Tab key?

    – Henrique
    Mar 22 at 20:33












  • 4





    Please edit and give an example of what you want to do.

    – dessert
    Mar 22 at 8:50






  • 6





    No, not without coding it. But you can use "tab" completion.

    – Rinzwind
    Mar 22 at 8:51







  • 2





    Too long for what?

    – Carl Witthoft
    Mar 22 at 11:59






  • 1





    Have you tried typing the first two or three letters of the file name and then pressin the Tab key?

    – Henrique
    Mar 22 at 20:33







4




4





Please edit and give an example of what you want to do.

– dessert
Mar 22 at 8:50





Please edit and give an example of what you want to do.

– dessert
Mar 22 at 8:50




6




6





No, not without coding it. But you can use "tab" completion.

– Rinzwind
Mar 22 at 8:51






No, not without coding it. But you can use "tab" completion.

– Rinzwind
Mar 22 at 8:51





2




2





Too long for what?

– Carl Witthoft
Mar 22 at 11:59





Too long for what?

– Carl Witthoft
Mar 22 at 11:59




1




1





Have you tried typing the first two or three letters of the file name and then pressin the Tab key?

– Henrique
Mar 22 at 20:33





Have you tried typing the first two or three letters of the file name and then pressin the Tab key?

– Henrique
Mar 22 at 20:33










9 Answers
9






active

oldest

votes


















42














You probably haven't discovered Tab-completion (see here) yet.



While typing a filename in Terminal just type a first few letters and hit Tab and see magic!






share|improve this answer


















  • 6





    Or just type the first few letters of the filename, and a *, if you don't want to use Tab-completion for some reason. Or even *abc* if the filename contains abc somewhere (try to use a subpattern that's unique to the filename you want). Or just copy/paste the filename using the mouse.

    – Guntram Blohm
    Mar 22 at 11:16






  • 4





    @guntram Or you can even drag-and-drop files to Terminal.

    – pomsky
    Mar 22 at 11:21






  • 5





    @GuntramBlohm you should make that an answer. I think it is sufficiently different from this answer to stand on its own.

    – KennyPeanuts
    Mar 22 at 15:01


















30














Just for fun, literally answering the question:



enter image description here



#!/usr/bin/env python3
import os
import subprocess

show_hidden = False

currfiles = os.listdir("./")
if not show_hidden:
currfiles = [f for f in currfiles if not f.startswith(".")]
n = 1
for f in currfiles:
print(str(n) + ". " + f)
n = n + 1

picked = int(input("Quick, quick, give me a number:n"))
subprocess.run(["xdg-open", currfiles[picked - 1]])


How it works in practice



  1. In terminal, in the working dir, run "o" (as a command)


  2. The content of the current directory is listed, numbered. Pick the number and the item is opened:



    enter image description here



Set up



...is easy:



  1. Create, if it doesn't exist yet, a folder named "bin" in your home directory

  2. Copy the script into an empty file, save it as (literally) "o" (no extension), and make it executable


  3. Log out and back in and start using the command by just typing



    $ o


    in terminal



N.B.



If you'd like to show hidden files as well, change



show_hidden = False


into:



show_hidden = True





share|improve this answer




















  • 1





    If ~/bin isn't already in your PATH, you'll have to add it (for instance, putting a line like export PATH="$PATH:~/bin" into .bashrc or .profile.)

    – kundor
    Mar 22 at 20:08












  • See b0fh's answer - this seems to be a built-in from bash

    – mgarciaisaia
    Mar 22 at 20:25











  • @kundor nope, not on Ubuntu. Log out and in does the job, or simply source ~/.profile.

    – Jacob Vlijm
    Mar 22 at 20:47











  • @JacobVlijm ~/bin is not built into anything at all. Ubuntu and Debian ship with custom ~/.profile that has lines if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" ; fi. On Mac OS X and CentOS you have to configure that yourself. A good chance is that if Ubuntu is provided to a person by IT department, chances are the ~/.profile won't be the same as default Ubuntu, so it's a good practice to always beware that ~/bin is not standard. Bash also can ignore ~/.profile if you launch the shell with --no-profile option

    – Sergiy Kolodyazhnyy
    Mar 23 at 5:21











  • @mgarciaisaia Original comment was meant for you, actually ^

    – Sergiy Kolodyazhnyy
    Mar 23 at 6:23


















27














There is a little-known feature in Bash that allows you to do this without calling on python or any other third-party tool, and with a single line:



select file in *; do open "$file"; break; done





share|improve this answer








New contributor




b0fh is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.















  • 7





    Excellent! open typically won't work, though (unless you're on Mac OS); xdg-open will probably do the trick on most GNU/Linux systems.

    – kundor
    Mar 22 at 20:11






  • 1





    But bash is not the only shell in existence, you know :-)

    – jamesqf
    Mar 23 at 5:25


















15














In pure bash, using the select statement:



PS3='Quick, quick, give a number: '

select file in *
do
xdg-open "$file"
break
done


Setting PS3 is just eyecandy. If you leave it out, you will just get the default prompt. If you leave out the break statement, the select statement will loop until you hit CTRL-D or CTRL-C.



Of course you can also run it as a one-liner:



select file in *; do xdg-open "$file"; break; done





share|improve this answer








New contributor




Oscar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




















  • Simple enough of a solution and works well enough. You can go a step further and make an alias or function out of it

    – Sergiy Kolodyazhnyy
    Mar 23 at 5:24


















7














You can install and use mc, Midnight Commander. It is a text user interface with menus etc inspired by the old Norton Commander, that was popular when people used MSDOS (before Windows).



sudo apt update
sudo apt install mc


and start it in a terminal window or in a text screen,



mc





share|improve this answer






























    4














    $ ls



    results.log
    string
    Templates
    textfile
    time
    time.save
    vegetables
    vegetablesbsh


    How bout



    ls | sed -n 3p



    Prints 3rd file name



    Templates



    Open it-



    xdg-open "$(ls | sed -n 3p)"



    Usually works.



    Put it in a script



    #!/bin/bash

    xdg-open "$(ls | sed -n "$1"p)"



    Name of script: open



    Save it in home folder.
    Run:



    ./open file_number





    share|improve this answer




















    • 8





      Why you shouldn't parse the output of ls

      – dessert
      Mar 22 at 12:20






    • 1





      Why not parse ls (and what do to instead)?

      – phuclv
      Mar 24 at 0:30


















    2














    On Linux filesystems, filenames have a very interesting property called inode: a directory ( or folder ) is a listing of inodes and which filenames point to those inodes. So, if you know the inode number, you can attempt to locate the file using find utility and do certain operations on it. This is especially useful when dealing with filenames in different locale, special characters, or when you accidentally created directory called ~.



    For example,



    $ ls -i1
    1103993 crs.py
    1103743 foobar.txt
    1147196 __pycache__
    1103739 'with'$'n''newline.png'
    1103740 yellowstone.jpg

    $ find . -type f -inum 1103743 -exec xdg-open ; -and -quit


    What this does is traverse current working directory ( represented by . ) and look for directory entry that is a file with inode number 1103743. If the file is found, xdg-open will open the file with default application and find will quit afterwards. The reason for the extra -and and -quit is to prevent xdg-open reopening the file if there exist hard links to the file (which is equivalent to opening the same file twice).






    share|improve this answer






























      1














      Make some files:



      $ for i in $(seq -w 0 20); do echo "This is file $i." > $i.txt; done
      $ ls
      00.txt 03.txt 06.txt 09.txt 12.txt 15.txt 18.txt
      01.txt 04.txt 07.txt 10.txt 13.txt 16.txt 19.txt
      02.txt 05.txt 08.txt 11.txt 14.txt 17.txt 20.txt
      $ cat 16.txt
      This is file 16.


      Put the files into a variable and open the file by an index.



      $ files=(*)
      $ xdg-open "$files[12]"
      # Opens 12.txt in a text editor, which reads "This is file 12."


      Replace 12 with the index you're trying to open.






      share|improve this answer

























      • I'd prefer 00..20 instead of $(seq -w 0 20) because it's just one external process less to spawn. I'm not sure about portability though. Might be a bash-ism.. ;-)

        – Oscar
        Mar 25 at 15:38


















      0














      This is probably the simplest answer that directly answers the question.
      try the following:



      touch file-1 file-2 file-3


      Let's say we want to open (or edit) the second file, we can do the following:



      echo `ls` | cut -d' ' -f2


      this will output the name of the second file, which we can use as input to the command we want to perform, for example:



      cat $( echo `ls` | cut -d' ' -f2 )


      will output the content of the second file.




      note that you can change the order in which the files are printed by ls, by tweaking ls arguments, see man ls for details.




      [UPDATE] this assumes that you have no white-spaces in file names,

      thanks @wjandrea for your observation.






      share|improve this answer










      New contributor




      HElanabi is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.















      • 1





        This will fail for filenames that contain spaces. This answer gets around that, but it's still a bad idea to parse ls. Also backticks are deprecated. Use $() instead.

        – wjandrea
        Mar 24 at 1:27











      Your Answer








      StackExchange.ready(function()
      var channelOptions =
      tags: "".split(" "),
      id: "89"
      ;
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function()
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled)
      StackExchange.using("snippets", function()
      createEditor();
      );

      else
      createEditor();

      );

      function createEditor()
      StackExchange.prepareEditor(
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader:
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      ,
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      );



      );













      draft saved

      draft discarded


















      StackExchange.ready(
      function ()
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1127755%2fopen-a-doc-from-terminal-but-not-by-its-name%23new-answer', 'question_page');

      );

      Post as a guest















      Required, but never shown

























      9 Answers
      9






      active

      oldest

      votes








      9 Answers
      9






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      42














      You probably haven't discovered Tab-completion (see here) yet.



      While typing a filename in Terminal just type a first few letters and hit Tab and see magic!






      share|improve this answer


















      • 6





        Or just type the first few letters of the filename, and a *, if you don't want to use Tab-completion for some reason. Or even *abc* if the filename contains abc somewhere (try to use a subpattern that's unique to the filename you want). Or just copy/paste the filename using the mouse.

        – Guntram Blohm
        Mar 22 at 11:16






      • 4





        @guntram Or you can even drag-and-drop files to Terminal.

        – pomsky
        Mar 22 at 11:21






      • 5





        @GuntramBlohm you should make that an answer. I think it is sufficiently different from this answer to stand on its own.

        – KennyPeanuts
        Mar 22 at 15:01















      42














      You probably haven't discovered Tab-completion (see here) yet.



      While typing a filename in Terminal just type a first few letters and hit Tab and see magic!






      share|improve this answer


















      • 6





        Or just type the first few letters of the filename, and a *, if you don't want to use Tab-completion for some reason. Or even *abc* if the filename contains abc somewhere (try to use a subpattern that's unique to the filename you want). Or just copy/paste the filename using the mouse.

        – Guntram Blohm
        Mar 22 at 11:16






      • 4





        @guntram Or you can even drag-and-drop files to Terminal.

        – pomsky
        Mar 22 at 11:21






      • 5





        @GuntramBlohm you should make that an answer. I think it is sufficiently different from this answer to stand on its own.

        – KennyPeanuts
        Mar 22 at 15:01













      42












      42








      42







      You probably haven't discovered Tab-completion (see here) yet.



      While typing a filename in Terminal just type a first few letters and hit Tab and see magic!






      share|improve this answer













      You probably haven't discovered Tab-completion (see here) yet.



      While typing a filename in Terminal just type a first few letters and hit Tab and see magic!







      share|improve this answer












      share|improve this answer



      share|improve this answer










      answered Mar 22 at 8:51









      pomskypomsky

      33k11103135




      33k11103135







      • 6





        Or just type the first few letters of the filename, and a *, if you don't want to use Tab-completion for some reason. Or even *abc* if the filename contains abc somewhere (try to use a subpattern that's unique to the filename you want). Or just copy/paste the filename using the mouse.

        – Guntram Blohm
        Mar 22 at 11:16






      • 4





        @guntram Or you can even drag-and-drop files to Terminal.

        – pomsky
        Mar 22 at 11:21






      • 5





        @GuntramBlohm you should make that an answer. I think it is sufficiently different from this answer to stand on its own.

        – KennyPeanuts
        Mar 22 at 15:01












      • 6





        Or just type the first few letters of the filename, and a *, if you don't want to use Tab-completion for some reason. Or even *abc* if the filename contains abc somewhere (try to use a subpattern that's unique to the filename you want). Or just copy/paste the filename using the mouse.

        – Guntram Blohm
        Mar 22 at 11:16






      • 4





        @guntram Or you can even drag-and-drop files to Terminal.

        – pomsky
        Mar 22 at 11:21






      • 5





        @GuntramBlohm you should make that an answer. I think it is sufficiently different from this answer to stand on its own.

        – KennyPeanuts
        Mar 22 at 15:01







      6




      6





      Or just type the first few letters of the filename, and a *, if you don't want to use Tab-completion for some reason. Or even *abc* if the filename contains abc somewhere (try to use a subpattern that's unique to the filename you want). Or just copy/paste the filename using the mouse.

      – Guntram Blohm
      Mar 22 at 11:16





      Or just type the first few letters of the filename, and a *, if you don't want to use Tab-completion for some reason. Or even *abc* if the filename contains abc somewhere (try to use a subpattern that's unique to the filename you want). Or just copy/paste the filename using the mouse.

      – Guntram Blohm
      Mar 22 at 11:16




      4




      4





      @guntram Or you can even drag-and-drop files to Terminal.

      – pomsky
      Mar 22 at 11:21





      @guntram Or you can even drag-and-drop files to Terminal.

      – pomsky
      Mar 22 at 11:21




      5




      5





      @GuntramBlohm you should make that an answer. I think it is sufficiently different from this answer to stand on its own.

      – KennyPeanuts
      Mar 22 at 15:01





      @GuntramBlohm you should make that an answer. I think it is sufficiently different from this answer to stand on its own.

      – KennyPeanuts
      Mar 22 at 15:01













      30














      Just for fun, literally answering the question:



      enter image description here



      #!/usr/bin/env python3
      import os
      import subprocess

      show_hidden = False

      currfiles = os.listdir("./")
      if not show_hidden:
      currfiles = [f for f in currfiles if not f.startswith(".")]
      n = 1
      for f in currfiles:
      print(str(n) + ". " + f)
      n = n + 1

      picked = int(input("Quick, quick, give me a number:n"))
      subprocess.run(["xdg-open", currfiles[picked - 1]])


      How it works in practice



      1. In terminal, in the working dir, run "o" (as a command)


      2. The content of the current directory is listed, numbered. Pick the number and the item is opened:



        enter image description here



      Set up



      ...is easy:



      1. Create, if it doesn't exist yet, a folder named "bin" in your home directory

      2. Copy the script into an empty file, save it as (literally) "o" (no extension), and make it executable


      3. Log out and back in and start using the command by just typing



        $ o


        in terminal



      N.B.



      If you'd like to show hidden files as well, change



      show_hidden = False


      into:



      show_hidden = True





      share|improve this answer




















      • 1





        If ~/bin isn't already in your PATH, you'll have to add it (for instance, putting a line like export PATH="$PATH:~/bin" into .bashrc or .profile.)

        – kundor
        Mar 22 at 20:08












      • See b0fh's answer - this seems to be a built-in from bash

        – mgarciaisaia
        Mar 22 at 20:25











      • @kundor nope, not on Ubuntu. Log out and in does the job, or simply source ~/.profile.

        – Jacob Vlijm
        Mar 22 at 20:47











      • @JacobVlijm ~/bin is not built into anything at all. Ubuntu and Debian ship with custom ~/.profile that has lines if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" ; fi. On Mac OS X and CentOS you have to configure that yourself. A good chance is that if Ubuntu is provided to a person by IT department, chances are the ~/.profile won't be the same as default Ubuntu, so it's a good practice to always beware that ~/bin is not standard. Bash also can ignore ~/.profile if you launch the shell with --no-profile option

        – Sergiy Kolodyazhnyy
        Mar 23 at 5:21











      • @mgarciaisaia Original comment was meant for you, actually ^

        – Sergiy Kolodyazhnyy
        Mar 23 at 6:23















      30














      Just for fun, literally answering the question:



      enter image description here



      #!/usr/bin/env python3
      import os
      import subprocess

      show_hidden = False

      currfiles = os.listdir("./")
      if not show_hidden:
      currfiles = [f for f in currfiles if not f.startswith(".")]
      n = 1
      for f in currfiles:
      print(str(n) + ". " + f)
      n = n + 1

      picked = int(input("Quick, quick, give me a number:n"))
      subprocess.run(["xdg-open", currfiles[picked - 1]])


      How it works in practice



      1. In terminal, in the working dir, run "o" (as a command)


      2. The content of the current directory is listed, numbered. Pick the number and the item is opened:



        enter image description here



      Set up



      ...is easy:



      1. Create, if it doesn't exist yet, a folder named "bin" in your home directory

      2. Copy the script into an empty file, save it as (literally) "o" (no extension), and make it executable


      3. Log out and back in and start using the command by just typing



        $ o


        in terminal



      N.B.



      If you'd like to show hidden files as well, change



      show_hidden = False


      into:



      show_hidden = True





      share|improve this answer




















      • 1





        If ~/bin isn't already in your PATH, you'll have to add it (for instance, putting a line like export PATH="$PATH:~/bin" into .bashrc or .profile.)

        – kundor
        Mar 22 at 20:08












      • See b0fh's answer - this seems to be a built-in from bash

        – mgarciaisaia
        Mar 22 at 20:25











      • @kundor nope, not on Ubuntu. Log out and in does the job, or simply source ~/.profile.

        – Jacob Vlijm
        Mar 22 at 20:47











      • @JacobVlijm ~/bin is not built into anything at all. Ubuntu and Debian ship with custom ~/.profile that has lines if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" ; fi. On Mac OS X and CentOS you have to configure that yourself. A good chance is that if Ubuntu is provided to a person by IT department, chances are the ~/.profile won't be the same as default Ubuntu, so it's a good practice to always beware that ~/bin is not standard. Bash also can ignore ~/.profile if you launch the shell with --no-profile option

        – Sergiy Kolodyazhnyy
        Mar 23 at 5:21











      • @mgarciaisaia Original comment was meant for you, actually ^

        – Sergiy Kolodyazhnyy
        Mar 23 at 6:23













      30












      30








      30







      Just for fun, literally answering the question:



      enter image description here



      #!/usr/bin/env python3
      import os
      import subprocess

      show_hidden = False

      currfiles = os.listdir("./")
      if not show_hidden:
      currfiles = [f for f in currfiles if not f.startswith(".")]
      n = 1
      for f in currfiles:
      print(str(n) + ". " + f)
      n = n + 1

      picked = int(input("Quick, quick, give me a number:n"))
      subprocess.run(["xdg-open", currfiles[picked - 1]])


      How it works in practice



      1. In terminal, in the working dir, run "o" (as a command)


      2. The content of the current directory is listed, numbered. Pick the number and the item is opened:



        enter image description here



      Set up



      ...is easy:



      1. Create, if it doesn't exist yet, a folder named "bin" in your home directory

      2. Copy the script into an empty file, save it as (literally) "o" (no extension), and make it executable


      3. Log out and back in and start using the command by just typing



        $ o


        in terminal



      N.B.



      If you'd like to show hidden files as well, change



      show_hidden = False


      into:



      show_hidden = True





      share|improve this answer















      Just for fun, literally answering the question:



      enter image description here



      #!/usr/bin/env python3
      import os
      import subprocess

      show_hidden = False

      currfiles = os.listdir("./")
      if not show_hidden:
      currfiles = [f for f in currfiles if not f.startswith(".")]
      n = 1
      for f in currfiles:
      print(str(n) + ". " + f)
      n = n + 1

      picked = int(input("Quick, quick, give me a number:n"))
      subprocess.run(["xdg-open", currfiles[picked - 1]])


      How it works in practice



      1. In terminal, in the working dir, run "o" (as a command)


      2. The content of the current directory is listed, numbered. Pick the number and the item is opened:



        enter image description here



      Set up



      ...is easy:



      1. Create, if it doesn't exist yet, a folder named "bin" in your home directory

      2. Copy the script into an empty file, save it as (literally) "o" (no extension), and make it executable


      3. Log out and back in and start using the command by just typing



        $ o


        in terminal



      N.B.



      If you'd like to show hidden files as well, change



      show_hidden = False


      into:



      show_hidden = True






      share|improve this answer














      share|improve this answer



      share|improve this answer








      edited Mar 22 at 10:23

























      answered Mar 22 at 9:25









      Jacob VlijmJacob Vlijm

      65.6k9130226




      65.6k9130226







      • 1





        If ~/bin isn't already in your PATH, you'll have to add it (for instance, putting a line like export PATH="$PATH:~/bin" into .bashrc or .profile.)

        – kundor
        Mar 22 at 20:08












      • See b0fh's answer - this seems to be a built-in from bash

        – mgarciaisaia
        Mar 22 at 20:25











      • @kundor nope, not on Ubuntu. Log out and in does the job, or simply source ~/.profile.

        – Jacob Vlijm
        Mar 22 at 20:47











      • @JacobVlijm ~/bin is not built into anything at all. Ubuntu and Debian ship with custom ~/.profile that has lines if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" ; fi. On Mac OS X and CentOS you have to configure that yourself. A good chance is that if Ubuntu is provided to a person by IT department, chances are the ~/.profile won't be the same as default Ubuntu, so it's a good practice to always beware that ~/bin is not standard. Bash also can ignore ~/.profile if you launch the shell with --no-profile option

        – Sergiy Kolodyazhnyy
        Mar 23 at 5:21











      • @mgarciaisaia Original comment was meant for you, actually ^

        – Sergiy Kolodyazhnyy
        Mar 23 at 6:23












      • 1





        If ~/bin isn't already in your PATH, you'll have to add it (for instance, putting a line like export PATH="$PATH:~/bin" into .bashrc or .profile.)

        – kundor
        Mar 22 at 20:08












      • See b0fh's answer - this seems to be a built-in from bash

        – mgarciaisaia
        Mar 22 at 20:25











      • @kundor nope, not on Ubuntu. Log out and in does the job, or simply source ~/.profile.

        – Jacob Vlijm
        Mar 22 at 20:47











      • @JacobVlijm ~/bin is not built into anything at all. Ubuntu and Debian ship with custom ~/.profile that has lines if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" ; fi. On Mac OS X and CentOS you have to configure that yourself. A good chance is that if Ubuntu is provided to a person by IT department, chances are the ~/.profile won't be the same as default Ubuntu, so it's a good practice to always beware that ~/bin is not standard. Bash also can ignore ~/.profile if you launch the shell with --no-profile option

        – Sergiy Kolodyazhnyy
        Mar 23 at 5:21











      • @mgarciaisaia Original comment was meant for you, actually ^

        – Sergiy Kolodyazhnyy
        Mar 23 at 6:23







      1




      1





      If ~/bin isn't already in your PATH, you'll have to add it (for instance, putting a line like export PATH="$PATH:~/bin" into .bashrc or .profile.)

      – kundor
      Mar 22 at 20:08






      If ~/bin isn't already in your PATH, you'll have to add it (for instance, putting a line like export PATH="$PATH:~/bin" into .bashrc or .profile.)

      – kundor
      Mar 22 at 20:08














      See b0fh's answer - this seems to be a built-in from bash

      – mgarciaisaia
      Mar 22 at 20:25





      See b0fh's answer - this seems to be a built-in from bash

      – mgarciaisaia
      Mar 22 at 20:25













      @kundor nope, not on Ubuntu. Log out and in does the job, or simply source ~/.profile.

      – Jacob Vlijm
      Mar 22 at 20:47





      @kundor nope, not on Ubuntu. Log out and in does the job, or simply source ~/.profile.

      – Jacob Vlijm
      Mar 22 at 20:47













      @JacobVlijm ~/bin is not built into anything at all. Ubuntu and Debian ship with custom ~/.profile that has lines if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" ; fi. On Mac OS X and CentOS you have to configure that yourself. A good chance is that if Ubuntu is provided to a person by IT department, chances are the ~/.profile won't be the same as default Ubuntu, so it's a good practice to always beware that ~/bin is not standard. Bash also can ignore ~/.profile if you launch the shell with --no-profile option

      – Sergiy Kolodyazhnyy
      Mar 23 at 5:21





      @JacobVlijm ~/bin is not built into anything at all. Ubuntu and Debian ship with custom ~/.profile that has lines if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" ; fi. On Mac OS X and CentOS you have to configure that yourself. A good chance is that if Ubuntu is provided to a person by IT department, chances are the ~/.profile won't be the same as default Ubuntu, so it's a good practice to always beware that ~/bin is not standard. Bash also can ignore ~/.profile if you launch the shell with --no-profile option

      – Sergiy Kolodyazhnyy
      Mar 23 at 5:21













      @mgarciaisaia Original comment was meant for you, actually ^

      – Sergiy Kolodyazhnyy
      Mar 23 at 6:23





      @mgarciaisaia Original comment was meant for you, actually ^

      – Sergiy Kolodyazhnyy
      Mar 23 at 6:23











      27














      There is a little-known feature in Bash that allows you to do this without calling on python or any other third-party tool, and with a single line:



      select file in *; do open "$file"; break; done





      share|improve this answer








      New contributor




      b0fh is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.















      • 7





        Excellent! open typically won't work, though (unless you're on Mac OS); xdg-open will probably do the trick on most GNU/Linux systems.

        – kundor
        Mar 22 at 20:11






      • 1





        But bash is not the only shell in existence, you know :-)

        – jamesqf
        Mar 23 at 5:25















      27














      There is a little-known feature in Bash that allows you to do this without calling on python or any other third-party tool, and with a single line:



      select file in *; do open "$file"; break; done





      share|improve this answer








      New contributor




      b0fh is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.















      • 7





        Excellent! open typically won't work, though (unless you're on Mac OS); xdg-open will probably do the trick on most GNU/Linux systems.

        – kundor
        Mar 22 at 20:11






      • 1





        But bash is not the only shell in existence, you know :-)

        – jamesqf
        Mar 23 at 5:25













      27












      27








      27







      There is a little-known feature in Bash that allows you to do this without calling on python or any other third-party tool, and with a single line:



      select file in *; do open "$file"; break; done





      share|improve this answer








      New contributor




      b0fh is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.










      There is a little-known feature in Bash that allows you to do this without calling on python or any other third-party tool, and with a single line:



      select file in *; do open "$file"; break; done






      share|improve this answer








      New contributor




      b0fh is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      share|improve this answer



      share|improve this answer






      New contributor




      b0fh is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      answered Mar 22 at 13:10









      b0fhb0fh

      37123




      37123




      New contributor




      b0fh is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      b0fh is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      b0fh is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.







      • 7





        Excellent! open typically won't work, though (unless you're on Mac OS); xdg-open will probably do the trick on most GNU/Linux systems.

        – kundor
        Mar 22 at 20:11






      • 1





        But bash is not the only shell in existence, you know :-)

        – jamesqf
        Mar 23 at 5:25












      • 7





        Excellent! open typically won't work, though (unless you're on Mac OS); xdg-open will probably do the trick on most GNU/Linux systems.

        – kundor
        Mar 22 at 20:11






      • 1





        But bash is not the only shell in existence, you know :-)

        – jamesqf
        Mar 23 at 5:25







      7




      7





      Excellent! open typically won't work, though (unless you're on Mac OS); xdg-open will probably do the trick on most GNU/Linux systems.

      – kundor
      Mar 22 at 20:11





      Excellent! open typically won't work, though (unless you're on Mac OS); xdg-open will probably do the trick on most GNU/Linux systems.

      – kundor
      Mar 22 at 20:11




      1




      1





      But bash is not the only shell in existence, you know :-)

      – jamesqf
      Mar 23 at 5:25





      But bash is not the only shell in existence, you know :-)

      – jamesqf
      Mar 23 at 5:25











      15














      In pure bash, using the select statement:



      PS3='Quick, quick, give a number: '

      select file in *
      do
      xdg-open "$file"
      break
      done


      Setting PS3 is just eyecandy. If you leave it out, you will just get the default prompt. If you leave out the break statement, the select statement will loop until you hit CTRL-D or CTRL-C.



      Of course you can also run it as a one-liner:



      select file in *; do xdg-open "$file"; break; done





      share|improve this answer








      New contributor




      Oscar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.




















      • Simple enough of a solution and works well enough. You can go a step further and make an alias or function out of it

        – Sergiy Kolodyazhnyy
        Mar 23 at 5:24















      15














      In pure bash, using the select statement:



      PS3='Quick, quick, give a number: '

      select file in *
      do
      xdg-open "$file"
      break
      done


      Setting PS3 is just eyecandy. If you leave it out, you will just get the default prompt. If you leave out the break statement, the select statement will loop until you hit CTRL-D or CTRL-C.



      Of course you can also run it as a one-liner:



      select file in *; do xdg-open "$file"; break; done





      share|improve this answer








      New contributor




      Oscar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.




















      • Simple enough of a solution and works well enough. You can go a step further and make an alias or function out of it

        – Sergiy Kolodyazhnyy
        Mar 23 at 5:24













      15












      15








      15







      In pure bash, using the select statement:



      PS3='Quick, quick, give a number: '

      select file in *
      do
      xdg-open "$file"
      break
      done


      Setting PS3 is just eyecandy. If you leave it out, you will just get the default prompt. If you leave out the break statement, the select statement will loop until you hit CTRL-D or CTRL-C.



      Of course you can also run it as a one-liner:



      select file in *; do xdg-open "$file"; break; done





      share|improve this answer








      New contributor




      Oscar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.










      In pure bash, using the select statement:



      PS3='Quick, quick, give a number: '

      select file in *
      do
      xdg-open "$file"
      break
      done


      Setting PS3 is just eyecandy. If you leave it out, you will just get the default prompt. If you leave out the break statement, the select statement will loop until you hit CTRL-D or CTRL-C.



      Of course you can also run it as a one-liner:



      select file in *; do xdg-open "$file"; break; done






      share|improve this answer








      New contributor




      Oscar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      share|improve this answer



      share|improve this answer






      New contributor




      Oscar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      answered Mar 22 at 13:12









      OscarOscar

      1535




      1535




      New contributor




      Oscar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      Oscar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      Oscar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.












      • Simple enough of a solution and works well enough. You can go a step further and make an alias or function out of it

        – Sergiy Kolodyazhnyy
        Mar 23 at 5:24

















      • Simple enough of a solution and works well enough. You can go a step further and make an alias or function out of it

        – Sergiy Kolodyazhnyy
        Mar 23 at 5:24
















      Simple enough of a solution and works well enough. You can go a step further and make an alias or function out of it

      – Sergiy Kolodyazhnyy
      Mar 23 at 5:24





      Simple enough of a solution and works well enough. You can go a step further and make an alias or function out of it

      – Sergiy Kolodyazhnyy
      Mar 23 at 5:24











      7














      You can install and use mc, Midnight Commander. It is a text user interface with menus etc inspired by the old Norton Commander, that was popular when people used MSDOS (before Windows).



      sudo apt update
      sudo apt install mc


      and start it in a terminal window or in a text screen,



      mc





      share|improve this answer



























        7














        You can install and use mc, Midnight Commander. It is a text user interface with menus etc inspired by the old Norton Commander, that was popular when people used MSDOS (before Windows).



        sudo apt update
        sudo apt install mc


        and start it in a terminal window or in a text screen,



        mc





        share|improve this answer

























          7












          7








          7







          You can install and use mc, Midnight Commander. It is a text user interface with menus etc inspired by the old Norton Commander, that was popular when people used MSDOS (before Windows).



          sudo apt update
          sudo apt install mc


          and start it in a terminal window or in a text screen,



          mc





          share|improve this answer













          You can install and use mc, Midnight Commander. It is a text user interface with menus etc inspired by the old Norton Commander, that was popular when people used MSDOS (before Windows).



          sudo apt update
          sudo apt install mc


          and start it in a terminal window or in a text screen,



          mc






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Mar 22 at 9:42









          sudodussudodus

          25.6k33078




          25.6k33078





















              4














              $ ls



              results.log
              string
              Templates
              textfile
              time
              time.save
              vegetables
              vegetablesbsh


              How bout



              ls | sed -n 3p



              Prints 3rd file name



              Templates



              Open it-



              xdg-open "$(ls | sed -n 3p)"



              Usually works.



              Put it in a script



              #!/bin/bash

              xdg-open "$(ls | sed -n "$1"p)"



              Name of script: open



              Save it in home folder.
              Run:



              ./open file_number





              share|improve this answer




















              • 8





                Why you shouldn't parse the output of ls

                – dessert
                Mar 22 at 12:20






              • 1





                Why not parse ls (and what do to instead)?

                – phuclv
                Mar 24 at 0:30















              4














              $ ls



              results.log
              string
              Templates
              textfile
              time
              time.save
              vegetables
              vegetablesbsh


              How bout



              ls | sed -n 3p



              Prints 3rd file name



              Templates



              Open it-



              xdg-open "$(ls | sed -n 3p)"



              Usually works.



              Put it in a script



              #!/bin/bash

              xdg-open "$(ls | sed -n "$1"p)"



              Name of script: open



              Save it in home folder.
              Run:



              ./open file_number





              share|improve this answer




















              • 8





                Why you shouldn't parse the output of ls

                – dessert
                Mar 22 at 12:20






              • 1





                Why not parse ls (and what do to instead)?

                – phuclv
                Mar 24 at 0:30













              4












              4








              4







              $ ls



              results.log
              string
              Templates
              textfile
              time
              time.save
              vegetables
              vegetablesbsh


              How bout



              ls | sed -n 3p



              Prints 3rd file name



              Templates



              Open it-



              xdg-open "$(ls | sed -n 3p)"



              Usually works.



              Put it in a script



              #!/bin/bash

              xdg-open "$(ls | sed -n "$1"p)"



              Name of script: open



              Save it in home folder.
              Run:



              ./open file_number





              share|improve this answer















              $ ls



              results.log
              string
              Templates
              textfile
              time
              time.save
              vegetables
              vegetablesbsh


              How bout



              ls | sed -n 3p



              Prints 3rd file name



              Templates



              Open it-



              xdg-open "$(ls | sed -n 3p)"



              Usually works.



              Put it in a script



              #!/bin/bash

              xdg-open "$(ls | sed -n "$1"p)"



              Name of script: open



              Save it in home folder.
              Run:



              ./open file_number






              share|improve this answer














              share|improve this answer



              share|improve this answer








              edited Mar 22 at 9:54


























              community wiki





              2 revs
              measSelf








              • 8





                Why you shouldn't parse the output of ls

                – dessert
                Mar 22 at 12:20






              • 1





                Why not parse ls (and what do to instead)?

                – phuclv
                Mar 24 at 0:30












              • 8





                Why you shouldn't parse the output of ls

                – dessert
                Mar 22 at 12:20






              • 1





                Why not parse ls (and what do to instead)?

                – phuclv
                Mar 24 at 0:30







              8




              8





              Why you shouldn't parse the output of ls

              – dessert
              Mar 22 at 12:20





              Why you shouldn't parse the output of ls

              – dessert
              Mar 22 at 12:20




              1




              1





              Why not parse ls (and what do to instead)?

              – phuclv
              Mar 24 at 0:30





              Why not parse ls (and what do to instead)?

              – phuclv
              Mar 24 at 0:30











              2














              On Linux filesystems, filenames have a very interesting property called inode: a directory ( or folder ) is a listing of inodes and which filenames point to those inodes. So, if you know the inode number, you can attempt to locate the file using find utility and do certain operations on it. This is especially useful when dealing with filenames in different locale, special characters, or when you accidentally created directory called ~.



              For example,



              $ ls -i1
              1103993 crs.py
              1103743 foobar.txt
              1147196 __pycache__
              1103739 'with'$'n''newline.png'
              1103740 yellowstone.jpg

              $ find . -type f -inum 1103743 -exec xdg-open ; -and -quit


              What this does is traverse current working directory ( represented by . ) and look for directory entry that is a file with inode number 1103743. If the file is found, xdg-open will open the file with default application and find will quit afterwards. The reason for the extra -and and -quit is to prevent xdg-open reopening the file if there exist hard links to the file (which is equivalent to opening the same file twice).






              share|improve this answer



























                2














                On Linux filesystems, filenames have a very interesting property called inode: a directory ( or folder ) is a listing of inodes and which filenames point to those inodes. So, if you know the inode number, you can attempt to locate the file using find utility and do certain operations on it. This is especially useful when dealing with filenames in different locale, special characters, or when you accidentally created directory called ~.



                For example,



                $ ls -i1
                1103993 crs.py
                1103743 foobar.txt
                1147196 __pycache__
                1103739 'with'$'n''newline.png'
                1103740 yellowstone.jpg

                $ find . -type f -inum 1103743 -exec xdg-open ; -and -quit


                What this does is traverse current working directory ( represented by . ) and look for directory entry that is a file with inode number 1103743. If the file is found, xdg-open will open the file with default application and find will quit afterwards. The reason for the extra -and and -quit is to prevent xdg-open reopening the file if there exist hard links to the file (which is equivalent to opening the same file twice).






                share|improve this answer

























                  2












                  2








                  2







                  On Linux filesystems, filenames have a very interesting property called inode: a directory ( or folder ) is a listing of inodes and which filenames point to those inodes. So, if you know the inode number, you can attempt to locate the file using find utility and do certain operations on it. This is especially useful when dealing with filenames in different locale, special characters, or when you accidentally created directory called ~.



                  For example,



                  $ ls -i1
                  1103993 crs.py
                  1103743 foobar.txt
                  1147196 __pycache__
                  1103739 'with'$'n''newline.png'
                  1103740 yellowstone.jpg

                  $ find . -type f -inum 1103743 -exec xdg-open ; -and -quit


                  What this does is traverse current working directory ( represented by . ) and look for directory entry that is a file with inode number 1103743. If the file is found, xdg-open will open the file with default application and find will quit afterwards. The reason for the extra -and and -quit is to prevent xdg-open reopening the file if there exist hard links to the file (which is equivalent to opening the same file twice).






                  share|improve this answer













                  On Linux filesystems, filenames have a very interesting property called inode: a directory ( or folder ) is a listing of inodes and which filenames point to those inodes. So, if you know the inode number, you can attempt to locate the file using find utility and do certain operations on it. This is especially useful when dealing with filenames in different locale, special characters, or when you accidentally created directory called ~.



                  For example,



                  $ ls -i1
                  1103993 crs.py
                  1103743 foobar.txt
                  1147196 __pycache__
                  1103739 'with'$'n''newline.png'
                  1103740 yellowstone.jpg

                  $ find . -type f -inum 1103743 -exec xdg-open ; -and -quit


                  What this does is traverse current working directory ( represented by . ) and look for directory entry that is a file with inode number 1103743. If the file is found, xdg-open will open the file with default application and find will quit afterwards. The reason for the extra -and and -quit is to prevent xdg-open reopening the file if there exist hard links to the file (which is equivalent to opening the same file twice).







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Mar 23 at 6:21









                  Sergiy KolodyazhnyySergiy Kolodyazhnyy

                  74.7k9155325




                  74.7k9155325





















                      1














                      Make some files:



                      $ for i in $(seq -w 0 20); do echo "This is file $i." > $i.txt; done
                      $ ls
                      00.txt 03.txt 06.txt 09.txt 12.txt 15.txt 18.txt
                      01.txt 04.txt 07.txt 10.txt 13.txt 16.txt 19.txt
                      02.txt 05.txt 08.txt 11.txt 14.txt 17.txt 20.txt
                      $ cat 16.txt
                      This is file 16.


                      Put the files into a variable and open the file by an index.



                      $ files=(*)
                      $ xdg-open "$files[12]"
                      # Opens 12.txt in a text editor, which reads "This is file 12."


                      Replace 12 with the index you're trying to open.






                      share|improve this answer

























                      • I'd prefer 00..20 instead of $(seq -w 0 20) because it's just one external process less to spawn. I'm not sure about portability though. Might be a bash-ism.. ;-)

                        – Oscar
                        Mar 25 at 15:38















                      1














                      Make some files:



                      $ for i in $(seq -w 0 20); do echo "This is file $i." > $i.txt; done
                      $ ls
                      00.txt 03.txt 06.txt 09.txt 12.txt 15.txt 18.txt
                      01.txt 04.txt 07.txt 10.txt 13.txt 16.txt 19.txt
                      02.txt 05.txt 08.txt 11.txt 14.txt 17.txt 20.txt
                      $ cat 16.txt
                      This is file 16.


                      Put the files into a variable and open the file by an index.



                      $ files=(*)
                      $ xdg-open "$files[12]"
                      # Opens 12.txt in a text editor, which reads "This is file 12."


                      Replace 12 with the index you're trying to open.






                      share|improve this answer

























                      • I'd prefer 00..20 instead of $(seq -w 0 20) because it's just one external process less to spawn. I'm not sure about portability though. Might be a bash-ism.. ;-)

                        – Oscar
                        Mar 25 at 15:38













                      1












                      1








                      1







                      Make some files:



                      $ for i in $(seq -w 0 20); do echo "This is file $i." > $i.txt; done
                      $ ls
                      00.txt 03.txt 06.txt 09.txt 12.txt 15.txt 18.txt
                      01.txt 04.txt 07.txt 10.txt 13.txt 16.txt 19.txt
                      02.txt 05.txt 08.txt 11.txt 14.txt 17.txt 20.txt
                      $ cat 16.txt
                      This is file 16.


                      Put the files into a variable and open the file by an index.



                      $ files=(*)
                      $ xdg-open "$files[12]"
                      # Opens 12.txt in a text editor, which reads "This is file 12."


                      Replace 12 with the index you're trying to open.






                      share|improve this answer















                      Make some files:



                      $ for i in $(seq -w 0 20); do echo "This is file $i." > $i.txt; done
                      $ ls
                      00.txt 03.txt 06.txt 09.txt 12.txt 15.txt 18.txt
                      01.txt 04.txt 07.txt 10.txt 13.txt 16.txt 19.txt
                      02.txt 05.txt 08.txt 11.txt 14.txt 17.txt 20.txt
                      $ cat 16.txt
                      This is file 16.


                      Put the files into a variable and open the file by an index.



                      $ files=(*)
                      $ xdg-open "$files[12]"
                      # Opens 12.txt in a text editor, which reads "This is file 12."


                      Replace 12 with the index you're trying to open.







                      share|improve this answer














                      share|improve this answer



                      share|improve this answer








                      edited Mar 25 at 13:40

























                      answered Mar 22 at 15:34









                      user1717828user1717828

                      196111




                      196111












                      • I'd prefer 00..20 instead of $(seq -w 0 20) because it's just one external process less to spawn. I'm not sure about portability though. Might be a bash-ism.. ;-)

                        – Oscar
                        Mar 25 at 15:38

















                      • I'd prefer 00..20 instead of $(seq -w 0 20) because it's just one external process less to spawn. I'm not sure about portability though. Might be a bash-ism.. ;-)

                        – Oscar
                        Mar 25 at 15:38
















                      I'd prefer 00..20 instead of $(seq -w 0 20) because it's just one external process less to spawn. I'm not sure about portability though. Might be a bash-ism.. ;-)

                      – Oscar
                      Mar 25 at 15:38





                      I'd prefer 00..20 instead of $(seq -w 0 20) because it's just one external process less to spawn. I'm not sure about portability though. Might be a bash-ism.. ;-)

                      – Oscar
                      Mar 25 at 15:38











                      0














                      This is probably the simplest answer that directly answers the question.
                      try the following:



                      touch file-1 file-2 file-3


                      Let's say we want to open (or edit) the second file, we can do the following:



                      echo `ls` | cut -d' ' -f2


                      this will output the name of the second file, which we can use as input to the command we want to perform, for example:



                      cat $( echo `ls` | cut -d' ' -f2 )


                      will output the content of the second file.




                      note that you can change the order in which the files are printed by ls, by tweaking ls arguments, see man ls for details.




                      [UPDATE] this assumes that you have no white-spaces in file names,

                      thanks @wjandrea for your observation.






                      share|improve this answer










                      New contributor




                      HElanabi is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                      Check out our Code of Conduct.















                      • 1





                        This will fail for filenames that contain spaces. This answer gets around that, but it's still a bad idea to parse ls. Also backticks are deprecated. Use $() instead.

                        – wjandrea
                        Mar 24 at 1:27















                      0














                      This is probably the simplest answer that directly answers the question.
                      try the following:



                      touch file-1 file-2 file-3


                      Let's say we want to open (or edit) the second file, we can do the following:



                      echo `ls` | cut -d' ' -f2


                      this will output the name of the second file, which we can use as input to the command we want to perform, for example:



                      cat $( echo `ls` | cut -d' ' -f2 )


                      will output the content of the second file.




                      note that you can change the order in which the files are printed by ls, by tweaking ls arguments, see man ls for details.




                      [UPDATE] this assumes that you have no white-spaces in file names,

                      thanks @wjandrea for your observation.






                      share|improve this answer










                      New contributor




                      HElanabi is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                      Check out our Code of Conduct.















                      • 1





                        This will fail for filenames that contain spaces. This answer gets around that, but it's still a bad idea to parse ls. Also backticks are deprecated. Use $() instead.

                        – wjandrea
                        Mar 24 at 1:27













                      0












                      0








                      0







                      This is probably the simplest answer that directly answers the question.
                      try the following:



                      touch file-1 file-2 file-3


                      Let's say we want to open (or edit) the second file, we can do the following:



                      echo `ls` | cut -d' ' -f2


                      this will output the name of the second file, which we can use as input to the command we want to perform, for example:



                      cat $( echo `ls` | cut -d' ' -f2 )


                      will output the content of the second file.




                      note that you can change the order in which the files are printed by ls, by tweaking ls arguments, see man ls for details.




                      [UPDATE] this assumes that you have no white-spaces in file names,

                      thanks @wjandrea for your observation.






                      share|improve this answer










                      New contributor




                      HElanabi is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                      Check out our Code of Conduct.










                      This is probably the simplest answer that directly answers the question.
                      try the following:



                      touch file-1 file-2 file-3


                      Let's say we want to open (or edit) the second file, we can do the following:



                      echo `ls` | cut -d' ' -f2


                      this will output the name of the second file, which we can use as input to the command we want to perform, for example:



                      cat $( echo `ls` | cut -d' ' -f2 )


                      will output the content of the second file.




                      note that you can change the order in which the files are printed by ls, by tweaking ls arguments, see man ls for details.




                      [UPDATE] this assumes that you have no white-spaces in file names,

                      thanks @wjandrea for your observation.







                      share|improve this answer










                      New contributor




                      HElanabi is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                      Check out our Code of Conduct.









                      share|improve this answer



                      share|improve this answer








                      edited Mar 24 at 8:31





















                      New contributor




                      HElanabi is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                      Check out our Code of Conduct.









                      answered Mar 23 at 22:35









                      HElanabiHElanabi

                      593




                      593




                      New contributor




                      HElanabi is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                      Check out our Code of Conduct.





                      New contributor





                      HElanabi is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                      Check out our Code of Conduct.






                      HElanabi is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                      Check out our Code of Conduct.







                      • 1





                        This will fail for filenames that contain spaces. This answer gets around that, but it's still a bad idea to parse ls. Also backticks are deprecated. Use $() instead.

                        – wjandrea
                        Mar 24 at 1:27












                      • 1





                        This will fail for filenames that contain spaces. This answer gets around that, but it's still a bad idea to parse ls. Also backticks are deprecated. Use $() instead.

                        – wjandrea
                        Mar 24 at 1:27







                      1




                      1





                      This will fail for filenames that contain spaces. This answer gets around that, but it's still a bad idea to parse ls. Also backticks are deprecated. Use $() instead.

                      – wjandrea
                      Mar 24 at 1:27





                      This will fail for filenames that contain spaces. This answer gets around that, but it's still a bad idea to parse ls. Also backticks are deprecated. Use $() instead.

                      – wjandrea
                      Mar 24 at 1:27

















                      draft saved

                      draft discarded
















































                      Thanks for contributing an answer to Ask Ubuntu!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid


                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.

                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function ()
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1127755%2fopen-a-doc-from-terminal-but-not-by-its-name%23new-answer', 'question_page');

                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      Adding axes to figuresAdding axes labels to LaTeX figuresLaTeX equivalent of ConTeXt buffersRotate a node but not its content: the case of the ellipse decorationHow to define the default vertical distance between nodes?TikZ scaling graphic and adjust node position and keep font sizeNumerical conditional within tikz keys?adding axes to shapesAlign axes across subfiguresAdding figures with a certain orderLine up nested tikz enviroments or how to get rid of themAdding axes labels to LaTeX figures

                      Luettelo Yhdysvaltain laivaston lentotukialuksista Lähteet | Navigointivalikko

                      Gary (muusikko) Sisällysluettelo Historia | Rockin' High | Lähteet | Aiheesta muualla | NavigointivalikkoInfobox OKTuomas "Gary" Keskinen Ancaran kitaristiksiProjekti Rockin' High