How to know linux path

How to get full path of a file?

@J0hnG4lt: that’s because you installed coreutils with homebrew and changed your PATH to point to the unprefixed binaries. Installing coreutils, leaving PATH alone, and using «greadlink» would work as well.

From the man page of readlink : Note realpath is the preferred command to use for canonicalization functionality.

I suppose you are using Linux.

I found a utility called realpath in coreutils 8.15.

realpath -s file.txt /data/ail_data/transformed_binaries/coreutils/test_folder_realpath/file.txt 

Since the question is about how to get the full/absolute path of a file and not about how to get the target of symlinks, use -s or —no-symlinks which means don’t expand symlinks.

As per @styrofoam-fly and @arch-standton comments, realpath alone doesn’t check for file existence, to solve this add the e argument: realpath -e file

realpath was committed to the coreutils repo end of 2011, release 8.15 was done in January 2012, I answered the question (with the readlink suggestion) in March 2011 🙂

realpath doesn’t check for the file’s existence, it just resolves paths. Asking for a full path of a not existing file should result in an error.

The following usually does the trick:

 echo "$(cd "$(dirname "$1")" && pwd -P)/$(basename "$1")" 

Hello. I found this answer best to my requirement. Can you explain how can I use a local variable instead of command line parameter(i.e. $1)

LOCAL_VARIABLE=»filename.txt» && echo $(cd $(dirname «$LOCAL_VARIABLE») && pwd -P)/$(basename «$LOCAL_VARIABLE»)

@SopalajodeArrierez Because readlink doesn’t work if the file is a symlink, it will show you the target of the symlink instead of the symlink itself.

I like this, because readlink takes me back to the parent dir where the symbolic link generates from, but this ignores it.

I know there’s an easier way that this, but darned if I can find it.

jcomeau@intrepid:~$ python -c 'import os; print(os.path.abspath("cat.wav"))' /home/jcomeau/cat.wav 
jcomeau@intrepid:~$ ls $PWD/cat.wav /home/jcomeau/cat.wav 

On Windows:

  • Holding Shift and right clicking on a file in Windows Explorer gives you an option called Copy as Path . This will copy the full path of the file to clipboard.

On Linux:

  • You can use the command realpath yourfile to get the full path of a file as suggested by others.
find $PWD -type f | grep "filename" 
find $PWD -type f -name "*filename*" 

Thanks! This inspired me to use a simpler find $PWD that works perfectly for me when it’s just a few files

If you are in the same directory as the file:

Replace file.txt with your target filename.

I know that this is an old question now, but just to add to the information here:

The Linux command which can be used to find the filepath of a command file, i.e.

You could use the fpn (full path name) script:

% pwd /Users/adamatan/bins/scripts/fpn % ls LICENSE README.md fpn.py % fpn * /Users/adamatan/bins/scripts/fpn/LICENSE /Users/adamatan/bins/scripts/fpn/README.md /Users/adamatan/bins/scripts/fpn/fpn.py 

fpn is not a standard Linux package, but it’s a free and open github project and you could set it up in a minute.

Works on Mac, Linux, *nix:

This will give you a quoted csv of all files in the current dir:

ls | xargs -I <> echo "$(pwd -P)/<>" | xargs | sed 's/ /","/g' 

The output of this can be easily copied into a python list or any similar data structure.

Читайте также:  Install unifi controller on linux

Yes, comma separated full paths for all files in pwd, for a file just do ls ‘filename’ instead of just ‘ls’.

echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1") 

This is explanation of what is going on at @ZeRemz’s answer:

  1. This script get relative path as argument «$1»
  2. Then we get dirname part of that path (you can pass either dir or file to this script): dirname «$1»
  3. Then we cd «$(dirname «$1») into this relative dir
  4. && pwd -P and get absolute path for it. -P option will avoid all symlinks
  5. After that we append basename to absolute path: $(basename «$1»)
  6. As final step we echo it

You may use this function. If the file name is given without relative path, then it is assumed to be present in the current working directory:

$ abspath file.txt /I/am/in/present/dir/file.txt 
$ abspath ../../some/dir/some-file.txt /I/am/in/some/dir/some-file.txt 
$ abspath "../../some/dir/another file.txt" /I/am/in/some/dir/another file.txt 

You can save this in your shell.rc or just put in console

function absolute_path < echo "$PWD/$1"; >alias ap="absolute_path" 

I was surprised no one mentioned located.

If you have the locate package installed, you don’t even need to be in the directory with the file of interest.

Say I am looking for the full pathname of a setenv.sh script. This is how to find it.

$ locate setenv.sh /home/davis/progs/devpost_aws_disaster_response/python/setenv.sh /home/davis/progs/devpost_aws_disaster_response/webapp/setenv.sh /home/davis/progs/eb_testy/setenv.sh 

Note, it finds three scripts in this case, but if I wanted just one I would do this:

$ locate *testy*setenv.sh /home/davis/progs/eb_testy/setenv.sh 

This solution uses commands that exist on Ubuntu 22.04, but generally exist on most other Linux distributions, unless they are just too hardcore for s’mores.

The shortest way to get the full path of a file on Linux or Mac is to use the ls command and the PWD environment variable.

 touch afile pwd /adir ls $PWD/afile /adir/afile 

You can do the same thing with a directory variable of your own, say d .

 touch afile d=/adir ls $d/afile /adir/afile 

Notice that without flags ls and echo are equivalent (for valid names of files in the current directory), so if you’re using echo for that, you can use ls instead if you want.

If the situation is reversed, so that you have the full path and want the filename, just use the basename command.

 touch afile basename $PWD/afile afile 

In a similar scenario, I’m launching a cshell script from some other location. For setting the correct absolute path of the script so that it runs in the designated directory only, I’m using the following code:

set script_dir = `pwd`/`dirname $0` 

$0 stores the exact string how the script was executed.

For e.g. if the script was launched like this: $> ../../test/test.csh , $script_dir will contain /home/abc/sandbox/v1/../../test

voted for this as this is the easiest and most relevant. However if you type ./test.csh you will have a path ending with /test/.

For Mac OS X, I replaced the utilities that come with the operating system and replaced them with a newer version of coreutils. This allows you to access tools like readlink -f (for absolute path to files) and realpath (absolute path to directories) on your Mac.

The Homebrew version appends a ‘G’ (for GNU Tools) in front of the command name — so the equivalents become greadlink -f FILE and grealpath DIRECTORY .

Читайте также:  Configure openvpn for linux

Instructions for how to install the coreutils/GNU Tools on Mac OS X through Homebrew can be found in this StackExchange arcticle.

NB: The readlink -f and realpath commands should work out of the box for non-Mac Unix users.

I like many of the answers already given, but I have found this really useful, especially within a script to get the full path of a file, including following symlinks and relative references such as . and ..

dirname `readlink -e relative/path/to/file` 

Which will return the full path of the file from the root path onwards. This can be used in a script so that the script knows which path it is running from, which is useful in a repository clone which could be located anywhere on a machine.

basePath=`dirname \`readlink -e $0\`` 

I can then use the $ variable in my scripts to directly reference other scripts.

This worked pretty well for me. It doesn’t rely on the file system (a pro/con depending on need) so it’ll be fast; and, it should be portable to most any *NIX. It does assume the passed string is indeed relative to the PWD and not some other directory.

function abspath () < echo $1 | awk '\ # Root parent directory refs to the PWD for replacement below /^\.\.\// < sub("^", "./") >\ # Replace the symbolic PWD refs with the absolute PWD \ /^\.\// < sub("^\.", ENVIRON["PWD"])>\ # Print absolute paths \ /^\// \' > 

This is naive, but I had to make it to be POSIX compliant. Requires permission to cd into the file’s directory.

#!/bin/sh if [ $ = 0 ]; then echo "Error: 0 args. need 1" >&2 exit 1 fi if [ -d $ ]; then # Directory base=$( cd $; echo $ ) dir=$( cd $; echo $> ) if [ $ = / ]; then parentPath=$ else parentPath=$ fi if [ -z $ ] || [ -z $ ]; then if [ -n $ ]; then fullPath=$( cd $; echo $ ) else echo "Error: unsupported scenario 1" >&2 exit 1 fi fi elif [ $ = $ ]; then if [ -f ./$ ]; then # File in current directory base=$( echo $ ) parentPath=$( echo $ ) else echo "Error: unsupported scenario 2" >&2 exit 1 fi elif [ -f $ ] && [ -d $ ]; then # File in directory base=$( echo $ ) parentPath=$( cd $; echo $ ) else echo "Error: not file or directory" >&2 exit 1 fi if [ $ = / ]; then fullPath=$ fi fullPath=$ if [ ! -e $ ]; then echo "Error: does not exist" >&2 exit 1 fi echo $

Источник

How to show the full path of a file or directory in the terminal?

I need to know how the directory name in order to type it out in the terminal. How do I access the names of directories? Windows Explorer used to have a title bar with the full path. Can someone please help me figure out how to see the full path of a certain file?

If you know the path and need to type it out quickly, nothing is better than Tab completion, especially with zsh .

I figured out a way to delete files with BleachBit, thanks for your answer. But for the other query I still need to know how to see the FULL path of any certain file or folder.

3 Answers 3

If you are using nautilus to browse your files, you can toggle the navigation bar by pressing Ctrl + L .

If you are using the terminal, just use pwd to know the absolute path of your current location.

And don’t forget that space characters need to be escaped within the terminal. If you want to access /path/to/the force then you need to do cd /path/to/the\ force .

To display the full path of a file in the terminal just drag the file’s icon into the terminal, and the full path of the file will be displayed enclosed by two apostrophes (single quotation mark characters). It’s that simple.

In Ubuntu 20.04 and later drag and drop of files or directories doesn’t work from the desktop, but does work in other locations including dragging from the desktop in Files file manager.

find can do this quite handily from the terminal. Here’s an example in which I’m looking for the full path of the file Taxes-2013.pdf:

sudo find / -name Taxes-2013.pdf

/home/me/Documents/Taxes-2013.pdf 

I’m using sudo so that I can avoid all the permission denied output that I would otherwise get with find when searching from the root of the tree.

If you just want the pathname and want the filename stripped off you can use

sudo find / -name Taxes-2013.pdf | xargs -n1 dirname

Note: If you are in the habit of putting spaces in names this is relevant to you.

Источник

How to find application’s path from command line?

For example, I have git installed on my system. But I don’t remember where I installed it, so which command is fit to find this out?

Just in case, command -v and which worked in Linux Alpine 3.16.2 (Docker image). whereis and locate did not — not installed.

5 Answers 5

If it is in your path, then you can run either type git or which git . The which command has had problems getting the proper path (confusion between environment and dot files). For type , you can get just the path with the -p argument.

If it is not in your path, then it’s best to look for it with locate -b git It will find anything named ‘git’. It’ll be a long list, so might be good to qualify it with locate -b git | fgrep -w bin .

I use locate endlessly (it is very fast), but for those unaware of it, locate is only as up to date as its most recent database update, which is automatically run daily on my Ubuntu. The refresh command is sudo updatedb . Also locate has built-in regex capability, so commands like this works: locate -br «^git$» . -b` means restrict the search to just the basename . or without the -b , it searches the full pathname .. Also, it only searches paths you have configured it to search.. there is no command-line control of this other than your regex filters.

@Gilles, that’s funny for me the behavior is exactly the opposite: type is a shell builtin that tells me aliases and such, and which is an external program that shows me the path to an executable. although if there’s a builtin that gets in the way that executable won’t get called.

@quodlibetor The problems with which are that it doesn’t know about shell built-ins and functions (which is relevant when you’re wondering what typing the command will do), and it uses a different $PATH on some systems.

Источник

Оцените статью
Adblock
detector