如何获得文件的完整path?

有一个简单的方法,我可以打印file.txt的完整path?

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

<command>

 dir> <command> file.txt 

应该打印

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

使用readlink

 readlink -f file.txt 

我想你正在使用Linux。

我在coreutils 8.15中发现了一个名为realpath的工具。

 realpath realpath /data/ail_data/transformed_binaries/coreutils/test_folder_realpath/realpath 

以下通常是诀窍:

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

知道有这样一个更简单的方法,但是如果我能find它,我就不会明白…

 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 
 find $PWD -type f | grep "filename" 

要么

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

你可以使用fpn(完整path名)脚本:

 % 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项目 ,你可以在一分钟内设置它 。

如果您与文件在同一个目录中:

 ls "`pwd`/file.txt" 

用你的目标文件名replacefile.txt

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

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

$0存储确切的string如何执行脚本。

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

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

Homebrew版本在命令名之前附加了一个“G”(用于GNU工具) – 所以等价物变成了greadlink -f FILEgrealpath DIRECTORY

有关如何在Mac OS X上通过Homebrew安装coreutils / GNU工具的说明可以在这个StackExchange arcticle中find。

注意: readlink -frealpath命令对于非Mac Unix用户来说应该是readlink -f

在Windows中,你可以

Hold shift and right click on a file which gives you can option called "Copy as Path"

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

在Linux中你可以使用:

realpath yourfile获取文件的完整path,正如许多人所build议的那样。

你可以将它保存在你的“shell.rc”中,或者放在控制台中

函数absolute_path {echo“$ PWD / $ 1”; }

别名ap =“absolute_path”

例:

ap somefile.txt

会输出

/home/user/somefile.txt

 find / -samefile file.txt -print 

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

添加-xdev标志将避免find跨越设备边界(“挂载点”)。 (但是,如果find不是在file.txt的同一个设备上的某个目录中启动的,那么这可能会导致无法find)

请注意, find可以为单个文件系统对象报告多个path,因为一个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 

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

可用于查找命令文件的文件path的Linux命令,即

 $ which ls /bin/ls 

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

适用于Mac,Linux,* nix:

这会给你一个当前目录中所有文件的引用csv:

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

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

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

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

🙂

(我复制了另一个堆栈溢出答案的一些代码,但无法find答案了)

我发现的最简单的方法是

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

这对我来说很有效

这将适用于文件和文件夹:

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

通常:

 find `pwd` | grep <filename> 

或者,也可以为当前文件夹:

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

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

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

这将从根path向前返回file的完整path。 这可以在脚本中使用,以便脚本知道它从哪个path运行,这对于可以位于机器上的任何位置的存储库克隆来说是有用的。

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

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

希望这可以帮助,

戴夫

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

  1. cd进入目标文件的目录。
  2. 键入以下terminal命令之一。

终奌站

 ls "`pwd`/file.txt" echo $(pwd)/file.txt 
  1. file.txtreplace为您的实际文件名。
  2. Enter键

另一个Linux实用程序,做这个工作:

 fname <file> 
 echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1") 

这是@ ZeRemz 答案的解释 :

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

对于Mac OS,如果您只想获取查找器中文件的path,请控制单击该文件,然后向下滚动到底部的“服务”。 你有很多select,包括“复制path”和“复制完整path”。 点击其中的一个把剪贴板上的path。

除了“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 $ 

这也给控制台上的完整path和文件名称

题外话:这个方法只是给出相对的链接,而不是绝对的。 readlink -f命令是正确的。

下面打印出file.txt的绝对path,在这个例子中应该是在当前目录中。

 find file.txt 

让我们假设file.txt在用户foo的主目录中。 下面的所有命令都是相同的,它们都将在Linux中返回相同的/home/foo/file.txt,或者在OS X中的/Users/foo/file.txt中返回相同的命令:

 find ~/file.txt cd ~/ find file.txt find ./file.txt 

这适用于Linux和Mac OSX ..

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

这会给你文件的绝对path:

 find / -name file.txt