如何获取文件的完整路径?

时间:2011-03-10 20:45:28

标签: linux file unix path

我是否可以轻松打印file.txt的完整路径?

file.txt = /nfs/an/disks/jj/home/dir/file.txt

<command>

dir> <command> file.txt  

应该打印

/nfs/an/disks/jj/home/dir/file.txt

32 个答案:

答案 0 :(得分:998)

使用readlink

readlink -f file.txt

答案 1 :(得分:160)

我想你使用的是Linux。

我在coreutils 8.15中找到了一个名为realpath的实用程序。

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

根据@ styrofoam-fly和@ arch-standton评论,realpath单独检查文件是否存在,解决此问题时添加e参数:realpath -e file < / p>

答案 2 :(得分:70)

以下通常可以解决问题:

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

答案 3 :(得分:29)

知道这是一种更简单的方式,但是如果我能找到它就会黯然失色......

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

答案 4 :(得分:19)

find $PWD -type f | grep "filename"

find $PWD -type f -name "*filename*"

答案 5 :(得分:11)

如果您与文件位于同一目录:

ls "`pwd`/file.txt"

file.txt替换为您的目标文件名。

答案 6 :(得分:10)

在Windows中,您可以: -

  • 按住shift并右键单击一个文件,该文件为您提供了名为"Copy as Path"的选项

    这会将文件的完整路径复制到剪贴板。

在Linux中,您可以使用以下命令: -

  • realpath yourfile按照许多人的建议获取文件的完整路径。

答案 7 :(得分:5)

我知道现在这是一个老问题,但只是在这里添加信息:

Linux命令which可用于查找命令文件的文件路径,即

$ which ls
/bin/ls

这有一些警告;请参阅https://www.cyberciti.biz/faq/how-do-i-find-the-path-to-a-command-file/

答案 8 :(得分:3)

您可以使用fpn (full path name)脚本:

% 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不是标准的Linux软件包,但是a free and open github projectcould set it up in a minute

答案 9 :(得分:3)

适用于Mac,Linux,* nix:

这将为您提供当前目录中所有文件的引用csv:

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

可以将此输出轻松复制到python列表或任何类似的数据结构中。

答案 10 :(得分:2)

在类似的场景中,我正在从其他位置启动一个cshell脚本。要设置脚本的正确绝对路径以使其仅在指定目录中运行,我使用以下代码:

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

$0存储脚本执行的确切字符串。

例如如果脚本是这样启动的:$> ../../test/test.csh$script_dir将包含/home/abc/sandbox/v1/../../test

答案 11 :(得分:2)

对于Mac OS X,我更换了操作系统附带的实用程序,并将其替换为较新版本的coreutils。这允许您访问Mac上的readlink -f(用于文件的绝对路径)和realpath(目录的绝对路径)等工具。

Homebrew版本在命令名称前面添加了一个'G'(对于GNU工具) - 因此等价物变为greadlink -f FILEgrealpath DIRECTORY

有关如何通过Homebrew在Mac OS X上安装coreutils / GNU Tools的说明,请参阅this StackExchange arcticle

注意:对于非Mac Unix用户,readlink -frealpath命令应该是开箱即用的。

答案 12 :(得分:2)

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

这是对@ ZeRemz&#39; s answer发生的事情的解释:

  1. 此脚本将相对路径作为参数"$1"
  2. 然后我们得到 dirname 该路径的一部分(您可以将dir或文件传递给此脚本):dirname "$1"
  3. 然后我们cd "$(dirname "$1")进入这个相对的目录
  4. && pwd -P并获得它的绝对路径。 -P选项将避免所有符号链接
  5. 之后我们将 basename 附加到绝对路径:$(basename "$1")
  6. 作为最后一步,我们echo

答案 13 :(得分:1)

您可以将其保存在“shell.rc”中或只放入控制台

  

function absolute_path {echo“$ PWD / $ 1”; }

     

alias ap =“absolute_path”

示例:

  

ap somefile.txt

将输出

  

/home/user/somefile.txt

答案 14 :(得分:1)

这很幼稚,但是我必须使其符合POSIX。需要获得cd进入文件目录的权限。

#!/bin/sh
if [ ${#} = 0 ]; then
  echo "Error: 0 args. need 1" >&2
  exit 1
fi


if [ -d ${1} ]; then


  # Directory


  base=$( cd ${1}; echo ${PWD##*/} )
  dir=$( cd ${1}; echo ${PWD%${base}} )

  if [ ${dir} = / ]; then
    parentPath=${dir}
  else
    parentPath=${dir%/}
  fi

  if [ -z ${base} ] || [ -z ${parentPath} ]; then
    if [ -n ${1} ]; then
      fullPath=$( cd ${1}; echo ${PWD} )
    else
      echo "Error: unsupported scenario 1" >&2
      exit 1
    fi
  fi

elif [ ${1%/*} = ${1} ]; then

  if [ -f ./${1} ]; then


    # File in current directory

    base=$( echo ${1##*/} )
    parentPath=$( echo ${PWD} )

  else
    echo "Error: unsupported scenario 2" >&2
    exit 1
  fi
elif [ -f ${1} ] && [ -d ${1%/*} ]; then


  # File in directory

  base=$( echo ${1##*/} )
  parentPath=$( cd ${1%/*}; echo ${PWD} )

else
  echo "Error: not file or directory" >&2
  exit 1
fi

if [ ${parentPath} = / ]; then
  fullPath=${fullPath:-${parentPath}${base}}
fi

fullPath=${fullPath:-${parentPath}/${base}}

if [ ! -e ${fullPath} ]; then
  echo "Error: does not exist" >&2
  exit 1
fi

echo ${fullPath}

答案 15 :(得分:1)

您可以使用此功能。如果给出的文件名没有相对路径,则假定它存在于当前工作目录中:

abspath() { old=`pwd`;new=$(dirname "$1");if [ "$new" != "." ]; then cd $new; fi;file=`pwd`/$(basename "$1");cd $old;echo $file; }

用法:

$ 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

答案 16 :(得分:1)

这对我来说非常好。它不依赖于文件系统(根据需要提供pro / con),因此它会很快;并且,它应该可移植到大多数* NIX。它确实假设传递的字符串确实是相对于PWD而不是其他目录。

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 \
      /^\//   {print} \'
}

答案 17 :(得分:-1)

在Mac中,以下提到的行有效。无需添加任何花哨的行。

> pwd filename

答案 18 :(得分:-1)

对于Mac OS,如果您只想在取景器中获取文件的路径,请控制单击该文件,然后向下滚动到&#34;服务&#34;在底部。你会得到很多选择,包括&#34;复制路径&#34;和&#34;复制完整路径&#34;。单击其中一个将路径放在剪贴板上。

答案 19 :(得分:-1)

另一个执行此任务的Linux实用程序:

fname <file>

答案 20 :(得分:-1)

这适用于Linux和Mac OSX ..

 echo $(pwd)$/$(ls file.txt)

答案 21 :(得分:-1)

我喜欢已经给出的许多答案,但我发现这非常有用,特别是在脚本中获取文件的完整路径,包括以下符号链接和相对引用,例如.和{{1 }}

..

这将从根路径开始返回dirname `readlink -e relative/path/to/file` 的完整路径。 这可以在脚本中使用,以便脚本知道它从哪个路径运行,这在可以位于计算机上任何位置的存储库克隆中很有用。

file

然后我可以在脚本中使用basePath=`dirname \`readlink -e $0\`` 变量来直接引用其他脚本。

希望这有帮助,

戴夫

答案 22 :(得分:-1)

一般:

find `pwd` | grep <filename>

或者,仅适用于当前文件夹:

find `pwd` -maxdepth 1 | grep <filename>

答案 23 :(得分:-1)

这适用于文件和文件夹:

getAbsolutePath(){
    [[ -d $1 ]] && { cd "$1"; echo "$(pwd -P)"; } || 
    { cd "$(dirname "$1")" || exit 1; echo "$(pwd -P)/$(basename "$1")"; }
}

答案 24 :(得分:-1)

find / -samefile file.txt -print

将找到文件的所有链接,其中 inode编号与file.txt相同

添加-xdev标志将避免find跨越设备边界(“挂载点”)。 (但是,如果find未在与file.txt相同的设备上的目录中启动,则可能无法找到任何内容。

请注意find可以为单个文件系统对象报告多个路径,因为Inode可以通过多个目录条目链接,甚至可能使用不同的名称。例如:

find /bin -samefile /bin/gunzip -ls

将输出:

12845178    4 -rwxr-xr-x   2 root     root         2251 feb  9  2012 /bin/uncompress
12845178    4 -rwxr-xr-x   2 root     root         2251 feb  9  2012 /bin/gunzip

答案 25 :(得分:-2)

在Mac OSX中,执行以下步骤:

  1. cd到目标文件的目录中。
  2. 键入以下任一终端命令。
  3. 终奌站
    ls "`pwd`/file.txt"
    echo $(pwd)/file.txt
    
    1. file.txt替换为您的实际文件名。
    2. Enter

答案 26 :(得分:-2)

我找到的最简单方法是

for i in `ls`; do echo "`pwd`/$i"; done

它适合我

答案 27 :(得分:-2)

fp () {
PHYS_DIR=`pwd -P`
RESULT=$PHYS_DIR/$1
echo $RESULT | pbcopy
echo $RESULT
}

将文本复制到剪贴板并在终端窗口中显示文本。

:)

(我从另一个堆栈溢出答案中复制了一些代码,但再也找不到答案了)

答案 28 :(得分:-2)

获取文件的完整路径:

1)按下键盘上的键,打开包含文件的文件夹中的终端

CTRL + ALT + T

然后输入&#34; pwd&#34; ( P 的名称 W orking D irectory)的首字母缩写词:

your@device ~ $ pwd

那是所有人!

答案 29 :(得分:-3)

创建一个如下所示的函数(用pwd回显文件的绝对路径,并在路径的末尾添加文件:

abspath() { echo $(pwd "$1")/"$1"; }

现在您可以找到任何文件路径:

abspath myfile.ext

答案 30 :(得分:-3)

除了“readlink -f”之外,另一个常用命令:

$find  /the/long/path/but/I/can/use/TAB/to/auto/it/to/ -name myfile
/the/long/path/but/I/can/use/TAB/to/auto/it/to/myfile
$

这也在控制台提供完整的路径和文件名

偏离主题:此方法仅提供相对链接,而非绝对链接。 readlink -f命令是正确的命令。

答案 31 :(得分:-8)

这将为您提供文件的绝对路径:

find / -name file.txt