我编写了一个bash脚本,它将输入文件作为参数并读取它

我希望脚本转到包含输入文件的文件夹,以执行进一步的命令.

所以,how do I get the folder (and just the folder) from an input file?(在linux中)

推荐答案

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

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工具,它有一些局限性.例如,它没有正确地跟踪指向具有不同属性的文件的链接.

Linux相关问答推荐

动态链接ELF文件是否需要ELF节头表?

将(覆盖)文件移动到不同位置的同名文件夹中

inotifywait 可以说文件在另一个进程可以访问之前已关闭吗?

从父目录中删除目录而不删除父目录 (Linux)

如何在 DolphinDB 中递归查找目录中的所有文件?

为什么`__vfprintf_internal`(`stdio.h`中的`printfn`)强制`$rbp`在我的x86-64机器上向前跳转6313864字节?

什么是`quote`命令?

如何在 Linux 中向应用程序发出信号而不杀死它?

如何在 linux 上为 JNI 应用程序编译动态库?

从 Linux 到 Windows 交叉编译 C++ 应用程序的手册?

将 awk 输出保存到变量

bash 中的sed命令

如何在 shell 脚本中动态生成新的变量名?

如何通过 ssh 判断 ubuntu 服务器上是否存在 php 和 apache

Supervisord - 将进程标准输出重定向到控制台

cmake : 从脚本设置环境变量

如何使用cp从不同目录复制多个文件?

如何通过命令行识别特定的 Linux 风格?

libaio.so.1:无法打开共享对象文件

在 bash 脚本中使用备用屏幕