我编写了一个bash脚本,它将输入文件作为参数并读取它.
此文件包含一些路径(相对于其位置)与使用的其他文件.
我希望脚本转到包含输入文件的文件夹,以执行更多命令.
那么,如何从输入文件中获取文件夹(以及文件夹)?(在linux中.)
Che*_*evy 137
要获得完整路径使用:
readlink -f relative/path/to/file
Run Code Online (Sandbox Code Playgroud)
要获取文件的目录:
dirname relative/path/to/file
Run Code Online (Sandbox Code Playgroud)
你也可以将两者结合起来:
dirname $(readlink -f relative/path/to/file)
Run Code Online (Sandbox Code Playgroud)
如果readlink -f您的系统上没有,您可以使用:
function myreadlink() {
(
cd "$(dirname $1)" # or cd "${1%/*}"
echo "$PWD/$(basename $1)" # or echo "$PWD/${1##*/}"
)
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您只需要移动到指定为相对路径的文件的目录,则不需要知道绝对路径,相对路径是完全合法的,所以只需使用:
cd $(dirname relative/path/to/file)
Run Code Online (Sandbox Code Playgroud)
如果您希望返回(在脚本运行时)到原始路径,请使用pushd而不是cd,popd当您完成时.
这适用于文件和文件夹:
absPath(){
if [[ -d "$1" ]]; then
cd "$1"
echo "$(pwd -P)"
else
cd "$(dirname "$1")"
echo "$(pwd -P)/$(basename "$1")"
fi
}
Run Code Online (Sandbox Code Playgroud)
$cat abs.sh
#!/bin/bash
echo "$(cd "$(dirname "$1")"; pwd -P)"
Run Code Online (Sandbox Code Playgroud)
一些解释:
"$1"dirname "$1"cd "$(dirname "$1");进入这个相对目录pwd -P并获取绝对路径。该-P选项将避免符号链接echo我们然后运行你的脚本:
abs.sh your_file.txt
Run Code Online (Sandbox Code Playgroud)