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

2024-10-21 09:14:00
admin
原创
91
摘要:问题描述:有没有一种简单的方法可以打印出完整路径file.txt?file.txt = /nfs/an/disks/jj/home/dir/file.txt 这<command>dir> <command> file.txt 应该打印/nfs/an/disks...

问题描述:

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

解决方案 1:

使用readlink

readlink -f file.txt

解决方案 2:

我假设您正在使用 Linux。

realpath在 coreutils 8.15 中发现了一个名为的实用程序。

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

由于问题是关于如何获取文件的完整/绝对路径,而不是如何获取符号链接的目标,因此使用-s--no-symlinks表示不扩展符号链接。

根据 @styrofoam-fly 和 @arch-standton 的评论,realpath单独并不检查文件是否存在,为了解决这个问题,请添加e参数:realpath -e file

解决方案 3:

下面的方法通常可以达到这样的效果:

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

解决方案 4:

知道有比这更简单的方法,但我找不到它……

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

解决方案 5:

在 Windows 上:

  • 在 Windows 资源管理器中按住Shift并右键单击文件,您将看到一个名为的选项Copy as Path。这会将文件的完整路径复制到剪贴板。

在 Linux 上:

  • 您可以按照其他人的建议使用该命令realpath yourfile来获取文件的完整路径。

解决方案 6:

find $PWD -type f | grep "filename"

或者

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

解决方案 7:

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

ls "`pwd`/file.txt"

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

解决方案 8:

我知道这是一个老问题,但只是想在这里补充一些信息:

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

$ which ls
/bin/ls

对此有一些注意事项;请参阅https://www.cyberciti.biz/faq/how-do-i-find-the-path-to-a-command-file/

解决方案 9:

您可以使用fpn(完整路径名)脚本:

% 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 软件包,但它是一个免费且开放的 github 项目,您可以在一分钟内完成设置。

解决方案 10:

适用于 Mac、Linux、*nix:

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

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

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

解决方案 11:

该解决方案使用 Ubuntu 22.04 上存在的命令,但通常也存在于大多数其他 Linux 发行版中,除非它们对于 s'mores 来说太过硬核。

在 Linux 或 Mac 上获取文件完整路径的最短方法是使用ls命令和PWD环境变量。

<0.o> touch afile
<0.o> pwd
/adir
<0.o> ls $PWD/afile
/adir/afile

您可以用您自己的目录变量做同样的事情,比如说d

<0.o> touch afile
<0.o> d=/adir
<0.o> ls $d/afile
/adir/afile

请注意,没有标志ls <FILE>echo <FILE>是等效的(对于当前目录中的文件的有效名称),因此如果您使用echo它,您可以ls根据需要使用。

如果情况相反,以便您拥有完整路径并想要文件名,只需使用该basename命令。

<0.o> touch afile
<0.o> basename $PWD/afile
afile

解决方案 12:

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

这是对@ZeRemz 的回答的解释:

  1. 该脚本获取相对路径作为参数"$1"

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

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

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

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

  6. 作为最后echo一步

解决方案 13:

你可以使用这个函数。如果给出的文件名没有相对路径,则假定它存在于当前工作目录中:

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

解决方案 14:

我很惊讶没有人提到位置。

如果您已经locate安装了该软件包,您甚至不需要进入包含感兴趣文件的目录。

假设我正在寻找setenv.sh脚本的完整路径名。这是查找方法。

$ 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

请注意,在这种情况下它会找到三个脚本,但如果我只想要一个,我会这样做:

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

解决方案 15:

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

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

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

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

解决方案 16:

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

Homebrew 版本在命令名称前面添加了一个“G”(代表 GNU Tools),因此等效的命令变成了greadlink -f FILEgrealpath DIRECTORY

有关如何通过 Homebrew 在 Mac OS X 上安装 coreutils/GNU Tools 的说明,可在此 StackExchange 文章中找到。

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

解决方案 17:

您可以将其保存在您的shell.rc或直接放入控制台中

function absolute_path { echo "$PWD/$1"; }
alias ap="absolute_path"

例子:

ap somefile.txt

将输出

/home/user/somefile.txt

解决方案 18:

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

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

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

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

然后我可以${basePath}在我的脚本中使用该变量直接引用其他脚本。

希望这能有所帮助,

戴夫

解决方案 19:

对我来说,这个方法效果很好。它不依赖于文件系统(优点和缺点取决于需求),因此速度很快;而且,它应该可以移植到大多数 *NIX 上。它确实假设传递的字符串确实与 PWD 相关,而不是其他目录。

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

解决方案 20:

这很幼稚,但我必须使其符合 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}

解决方案 21:

这适用于 Linux 和 Mac OSX:

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

解决方案 22:

这对于文件和文件夹都有效:

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

解决方案 23:

通常:

find `pwd` | grep <filename>

或者,仅针对当前文件夹:

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

解决方案 24:

find / -samefile file.txt -print

将查找与 file.txt具有相同inode 号的文件的所有链接

添加-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:

另一个 Linux 实用程序可以完成这项工作:

fname <file>

解决方案 26:

对于 Mac OS,如果您只想获取 Finder 中文件的路径,请按住 Control 键单击文件,然后向下滚动到底部的“服务”。您会得到许多选项,包括“复制路径”和“复制完整路径”。单击其中一个选项会将路径放在剪贴板上。

解决方案 27:

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

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

:)

(我从另一个 stack overflow 答案中复制了一些代码,但是再也找不到那个答案了)

解决方案 28:

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

  1. cd进入目标文件的目录。

  2. 键入以下任一终端命令。

终端

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

  2. Enter

解决方案 29:

我发现的最简单的方法是:

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

它对我来说很有效。

解决方案 30:

除了“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命令才是正确的。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用