博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何获取文件的完整路径?
阅读量:2288 次
发布时间:2019-05-09

本文共 6027 字,大约阅读时间需要 20 分钟。

有没有一种简单的方法可以打印.txt的完整路径?

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

<command>

dir>  file.txt

应该打印

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

#1楼

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

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

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

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


#2楼

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

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

别名ap =“absolute_path”

例:

ap somefile.txt

将输出

/home/user/somefile.txt


#3楼

find $PWD -type f | grep "filename"

要么

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

#4楼

您可以使用脚本:

% pwd/Users/adamatan/bins/scripts/fpn% lsLICENSE   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不是标准的软件包,但它是 ,您 。


#5楼

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/uncompress12845178    4 -rwxr-xr-x   2 root     root         2251 feb  9  2012 /bin/gunzip

#6楼

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


#7楼

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

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

:)

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


#8楼

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

ls "`pwd`/file.txt"

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


#9楼

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

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

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

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


#10楼

我找到的最简单的方法是

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

这对我来说很有效


#11楼

这适用于文件和文件夹:

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

#12楼

通常:

find `pwd` | grep 

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

find `pwd` -maxdepth 1 | grep 

#13楼

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

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

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

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

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

希望这可以帮助,

戴夫


#14楼

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

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

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

abspath myfile.ext

#15楼

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

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

#16楼

这适用于Linux和Mac OSX ..

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

#17楼

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

fname 

#18楼

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

这是对@ ZeRemz 的 :

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

#19楼

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

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

$ which ls/bin/ls

这有一些警告; 请参阅 。


#20楼

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


#21楼

适用于Mac,Linux,* nix:

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

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

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


#22楼

在Windows中你可以: -

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

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

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

  • realpath yourfile你的文件,以获得许多建议的文件的完整路径。

#23楼

这对我很有用。 它不依赖于文件系统(根据需要的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} \'}

#24楼

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

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

#25楼

使用 :

readlink -f file.txt

#26楼

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

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

#27楼

以下通常可以解决问题:

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

#28楼

这很天真,但我不得不让它符合POSIX标准。 需要cd进入文件目录的权限。

#!/bin/shif [ ${#} = 0 ]; then  echo "Error: 0 args. need 1" >&2  exit 1fiif [ -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  fielif [ ${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  fielif [ -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 1fiif [ ${parentPath} = / ]; then  fullPath=${fullPath:-${parentPath}${base}}fifullPath=${fullPath:-${parentPath}/${base}}if [ ! -e ${fullPath} ]; then  echo "Error: does not exist" >&2  exit 1fiecho ${fullPath}

#29楼

在mac下面提到的线路工程。 无需添加任何花哨的线条。

> pwd filename

#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命令是正确的。

转载地址:http://mvdnb.baihongyu.com/

你可能感兴趣的文章
FFmpeg 解码
查看>>
ffmpeg 对图像数据格式以及图片缩放
查看>>
FFmpeg编解码常用函数ffmpeg av_parser_parse2()函数
查看>>
Android 使用CMake 编译NDK
查看>>
操作系统总结
查看>>
FFmpeg 解码视频流实现yuv播放
查看>>
ffmpeg YUV420P视频帧旋转
查看>>
IOS 硬件GPU解码
查看>>
Tutk P2P的原理和常见的实现方式
查看>>
VistualStudio2017配置ffmpeg库
查看>>
ARC下用块(block)的循环引用问题样例探究
查看>>
C++常量指针和指针常量
查看>>
Android EventBus详情
查看>>
IOS GPUImage 实现视频美颜相关
查看>>
IOS 使用itms-services协议,服务端安装应用
查看>>
关于 C++ 调用 python 详情
查看>>
IOS 使用NSURLProtocol 拦截网络请求实现缓存
查看>>
用Pyinstaller 打包 Python 生成 Mac OS X 应用
查看>>
使用python的mod_pbxproj 自动化 修改Xcode 工程
查看>>
Mac Security工具使用总结
查看>>