Open a doc from terminal, but not by its nameHow 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

How can the DM most effectively choose 1 out of an odd number of players to be targeted by an attack or effect?

Should I join an office cleaning event for free?

Is it possible to do 50 km distance without any previous training?

If Manufacturer spice model and Datasheet give different values which should I use?

What is the white spray-pattern residue inside these Falcon Heavy nozzles?

Copenhagen passport control - US citizen

How can I fix this gap between bookcases I made?

What are these boxed doors outside store fronts in New York?

A function which translates a sentence to title-case

Is there really no realistic way for a skeleton monster to move around without magic?

Patience, young "Padovan"

Are white and non-white police officers equally likely to kill black suspects?

How does one intimidate enemies without having the capacity for violence?

Copycat chess is back

How to make payment on the internet without leaving a money trail?

"which" command doesn't work / path of Safari?

Can Medicine checks be used, with decent rolls, to completely mitigate the risk of death from ongoing damage?

Example of a relative pronoun

I’m planning on buying a laser printer but concerned about the life cycle of toner in the machine

How do we improve the relationship with a client software team that performs poorly and is becoming less collaborative?

Why has Russell's definition of numbers using equivalence classes been finally abandoned? ( If it has actually been abandoned).

How is the claim "I am in New York only if I am in America" the same as "If I am in New York, then I am in America?

declaring a variable twice in IIFE

How is this relation reflexive?



Open a doc from terminal, but not by its name


How 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






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








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

75k9155327




75k9155327










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


















43














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


















  • 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























  • 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




















      • 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









      43














      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















      43














      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













      43












      43








      43







      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

      33.2k11104136




      33.2k11104136







      • 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

      66.1k9131230




      66.1k9131230







      • 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


















      • 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


















      • 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













      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












      share|improve this answer



      share|improve this answer










      answered Mar 22 at 13:10









      b0fhb0fh

      37123




      37123







      • 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























      • 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























      • 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













      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












      share|improve this answer



      share|improve this answer










      answered Mar 22 at 13:12









      OscarOscar

      1537




      1537












      • 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.7k33078




          25.7k33078





















              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

                  75k9155327




                  75k9155327





















                      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




















                      • 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




















                      • 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















                      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














                      share|improve this answer



                      share|improve this answer








                      edited Mar 24 at 8:31

























                      answered Mar 23 at 22:35









                      HElanabiHElanabi

                      593




                      593







                      • 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

                      How should I support this large drywall patch? Planned maintenance scheduled April 23, 2019 at 00:00UTC (8:00pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?How do I cover large gaps in drywall?How do I keep drywall around a patch from crumbling?Can I glue a second layer of drywall?How to patch long strip on drywall?Large drywall patch: how to avoid bulging seams?Drywall Mesh Patch vs. Bulge? To remove or not to remove?How to fix this drywall job?Prep drywall before backsplashWhat's the best way to fix this horrible drywall patch job?Drywall patching using 3M Patch Plus Primer

                      random experiment with two different functions on unit interval Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 00:00UTC (8:00pm US/Eastern)Random variable and probability space notionsRandom Walk with EdgesFinding functions where the increase over a random interval is Poisson distributedNumber of days until dayCan an observed event in fact be of zero probability?Unit random processmodels of coins and uniform distributionHow to get the number of successes given $n$ trials , probability $P$ and a random variable $X$Absorbing Markov chain in a computer. Is “almost every” turned into always convergence in computer executions?Stopped random walk is not uniformly integrable

                      Lowndes Grove History Architecture References Navigation menu32°48′6″N 79°57′58″W / 32.80167°N 79.96611°W / 32.80167; -79.9661132°48′6″N 79°57′58″W / 32.80167°N 79.96611°W / 32.80167; -79.9661178002500"National Register Information System"Historic houses of South Carolina"Lowndes Grove""+32° 48' 6.00", −79° 57' 58.00""Lowndes Grove, Charleston County (260 St. Margaret St., Charleston)""Lowndes Grove"The Charleston ExpositionIt Happened in South Carolina"Lowndes Grove (House), Saint Margaret Street & Sixth Avenue, Charleston, Charleston County, SC(Photographs)"Plantations of the Carolina Low Countrye