一尘不染

如何在bash中获取文件的绝对目录?

linux

我已经编写了一个bash脚本,它将输入文件作为参数并读取它。
该文件包含一些路径(相对于其位置),指向所使用的其他文件。

我希望脚本转到包含输入文件的文件夹,以执行更多命令。

那么, 如何从输入文件中获取文件夹(以及仅文件夹)? (在Linux中。)


阅读 333

收藏
2020-06-03

共1个答案

一尘不染

要获取完整路径,请使用:

readlink -f relative/path/to/file

要获取文件目录:

dirname relative/path/to/file

您还可以将两者结合起来:

dirname $(readlink -f relative/path/to/file)

如果readlink -f您的系统不可用,则可以使用以下*:

function myreadlink() {
  (
  cd "$(dirname $1)"         # or  cd "${1%/*}"
  echo "$PWD/$(basename $1)" # or  echo "$PWD/${1##*/}"
  )
}

请注意,如果只需要移动到指定为相对路径的文件的目录,就不需要知道绝对路径,相对路径是完全合法的,因此只需使用:

cd $(dirname relative/path/to/file)

如果希望(在脚本运行时)返回原始路径,请使用pushd代替cd,并popd在完成后使用。



尽管myreadlink在此问题的上下文中上述内容已经足够好,但相对于readlink上面建议的工具而言,它具有一些局限性。例如,它没有正确地链接到具有的不同文件的链接basename

2020-06-03