我已经编写了一个bash脚本,它将输入文件作为参数并读取它。 该文件包含一些路径(相对于其位置),指向所使用的其他文件。
我希望脚本转到包含输入文件的文件夹,以执行更多命令。
那么, 如何从输入文件中获取文件夹(以及仅文件夹)? (在Linux中。)
要获取完整路径,请使用:
readlink -f relative/path/to/file
要获取文件目录:
dirname relative/path/to/file
您还可以将两者结合起来:
dirname $(readlink -f relative/path/to/file)
如果readlink -f您的系统不可用,则可以使用以下*:
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在完成后使用。
pushd
cd
popd
尽管myreadlink在此问题的上下文中上述内容已经足够好,但相对于readlink上面建议的工具而言,它具有一些局限性。例如,它没有正确地链接到具有的不同文件的链接basename。
myreadlink
readlink
basename