49

How can you quickly get the complete path to a file for use in terminal?

46
readlink -f foo.bar

or (install it first)

realpath foo.bar
| improve this answer | |
  • This answer is more accurate than one accepted. – Kunok Oct 4 '16 at 9:23
  • For the complete folder: ls | xargs realpath. – Pablo Bianchi May 17 '17 at 13:57
  • 1
    The downside of readlink is that it will work even if the file doesn't exist. This can perpetuate bugs in very odd ways. – GregRos Jun 28 '18 at 17:30
  • to copy the path to the os clipboard realpath foo.bar | xclip -selection c – Osvaldo Maria Feb 20 at 12:58
33

Just drag and drop the file in the terminal.

| improve this answer | |
  • 1
    I'm putting this here so that I don't forget, let's hope it helps some of you :D – Olivier Lalonde Jan 26 '11 at 19:33
  • Returns an "smb://" prefixed path for SMB mounted shares instead of the actual mounted path. – Kupiakos Sep 26 '13 at 23:21
  • @Kupiakos: for me, gnome-terminal happily translates the dropped file path to '/home/alexcohn/.gvfs/…' – Alex Cohn Mar 17 '14 at 15:11
13

All good answers; Here is a tip for another situation.

If you are browsing your files using nautilus and you want the complete path of your current directory, then press CTRL+L. This changes the breadcrumb buttons temporarily back to the old-style address bar, allowing you to copy the path.

| improve this answer | |
  • … but this is still smb://-style, so it cannot be reused in terminal. – Alex Cohn Mar 17 '14 at 12:36
  • Interesting; on my system (Ubuntu 13.10) I do not get a smb://-style path. – Sicco Mar 17 '14 at 13:03
  • Exactly what I was looking for, I mean the terminal is a great place to ls but there is those times you work in a file folder views : ' ) – edencorbin Feb 1 '17 at 6:25
4

If it's an executable, then execute (in a terminal):

$ which your_executable

For example: $ which ls

| improve this answer | |
  • This is the answer i was looking for – Sharjeel Ahmed Jun 15 '15 at 19:18
1

In addition to dragging the icon, there are a few ways to get the full path without nautilus (or thunar, konqueror, et al.). You would then triple-click or click-drag and copy, potentially saving this in your clipboard manager*, and paste it where you need.
(pastie, klipper, glippy, glipper, anamnesis)

  • You can use find in a directory above your file. (If you don't know where it is, start where your shell drops you, [generally] in the top of your home directory.)
    find . | egrep filename

  • You can use locate to get the filename. (Run sudo updatedb if that hasn't been done recently.)

A more realistic example of using find would be something like :

$ find | egrep askubuntu | grep txt
./askubuntu-temp.txt
./drDocuments/web/meta.askubuntu.txt
./other/stuff/askubuntu.txt.iteration.1
./other/stuff/askubuntu.txt.iteration.2
[...]

To cut out the ones you don't like, e.g.:

find | egrep askubuntu | grep txt | egrep -v iteration
find | egrep askubuntu | grep txt | egrep -v 'iteration|meta|other'

locate is used much the same way, though grep is frequently more necessary:

locate myfile | egrep home | egrep -v 'mozilla|cache|local|bin|\.pyc|test' | grep \.py

This isn't the most efficient way to type this, but usually if I've lost a file, I do this iteratively, adding grep clauses as I go.

| improve this answer | |
1

Easily done in python using os.realpath() function:

$ python -c 'import os,sys;print(os.path.realpath(sys.argv[1]))' ./VirtualBox\ VMs/                                      
/mnt/HDD/VirtualBox VMs

From a related answer,you can also use readlink

$ readlink -e ./out.txt                                                                                                  
/home/username/out.txt
| improve this answer | |
0

If you simply copy a file in Nautilus, then the full path is copied.
Then paste it in the terminal. By simply pasting you get:

file:///home/juan/2017/agenda20170101.html

If you right-click and choose "Paste filenames" then you get:

'/home/juan/2017/agenda20170101.html'

with the quotes as shown.
This differs from Windows, that copies the file content instead of its name.

| improve this answer | |

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