首页 文章

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

提问于
浏览
557

有没有一种简单的方法可以打印 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

30 回答

  • -2

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

  • 3

    使用readlink

    readlink -f file.txt
    
  • 141

    以下通常可以解决问题:

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

    另一个Linux工具,它完成这项工作:

    fname <file>
    
  • 2

    这适用于文件和文件夹:

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

    你可以使用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 project而你could set it up in a minute .

  • -1

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

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

    $ which ls
    /bin/ls
    

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

  • 897

    这很天真,但我不得不让它符合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}
    
  • 1

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

    $ find / the / long / path /但/ I / can / use / TAB / to / auto / it / to / -name myfile
    /中/长/路径/但/ I / CAN /使用/ TAB /到/自动/它/到/ MYFILE
    $

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

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

  • -1

    *Works on Mac, Linux, nix:

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

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

    这个输出可以很容易地复制到python列表或任何类似的数据结构中 .

  • 2

    我想你正在使用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

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

    这是对@ ZeRemz的answer内容的解释:

    • 此脚本获取相对路径作为参数 "$1"

    • 然后我们得到该路径的dirname部分(您可以将dir或文件传递给此脚本): dirname "$1"

    • 然后我们 cd "$(dirname "$1") 进入这个相对的目录

    • && pwd -P 并获得它的绝对路径 . -P 选项将避免所有符号链接

    • 之后我们将basename附加到绝对路径: $(basename "$1")

    • 作为最后一步我们 echo

  • -1

    我找到的最简单的方法是

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

    这对我来说很有效

  • 4

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

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

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

    abspath myfile.ext
    
  • 18

    我知道这有一个更简单的方法,但是如果我能找到它就会变得很难...

    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
    
  • -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} \'
    }
    
  • -1

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

    • cd 进入目标文件的目录 .

    • 键入以下任一终端命令 .

    终端

    ls "`pwd`/file.txt"
    echo $(pwd)/file.txt
    
    • file.txt 替换为您的实际文件名 .

    • 按Enter键

  • -2

    在Windows中你可以: -

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

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

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

    • realpath yourfile 获取许多人建议的文件的完整路径 .
  • -3

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

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

    这将从根路径返回 file 的完整路径 . 这可以在脚本中使用,以便脚本知道它从哪个路径运行,这在可以位于计算机上任何位置的存储库克隆中很有用 .

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

    然后,我可以在脚本中使用 ${basePath} 变量来直接引用其他脚本 .

    希望这可以帮助,

    戴夫

  • -3
    find $PWD -type f | grep "filename"
    

    要么

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

    对于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 命令应该是开箱即用的 .

  • 67
    find / -samefile file.txt -print
    

    将使用与file.txt相同的 inode number 找到该文件的所有链接

    添加 -xdev 标志将避免 find 跨越设备边界("mount points") . (但如果 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
    
  • 3

    这适用于Linux和Mac OSX ..

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

    通常:

    find `pwd` | grep <filename>
    

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

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

    要获取文件的完整路径:

    1)打开你的终端 in the folder containing your file ,按下键盘上的键:

    CTRL ALT T

    2)然后键入"pwd"( P rint名称 W orking D irectory的首字母缩写):

    your@device ~ $ pwd
    

    这是所有人!

  • 8

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

    function absolute_path {echo“$ PWD / $ 1”;别名ap =“absolute_path”

    例:

    ap somefile.txt

    将输出

    /home/user/somefile.txt

  • -1

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

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

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

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

  • 10

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

    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
    
  • -1
    fp () {
    PHYS_DIR=`pwd -P`
    RESULT=$PHYS_DIR/$1
    echo $RESULT | pbcopy
    echo $RESULT
    }
    

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

    :)

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

  • 1

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

    ls "`pwd`/file.txt"
    

    用目标文件名替换 file.txt .

相关问题