shell 写一个函数,算出两个文件的相对路径
封面图
•
2025-11-02
•
Linux
226
0
0
0
在 Shell 脚本中,你可以写一个函数来计算两个文件之间的**相对路径**。这个函数可以基于当前工作目录(或指定的基准目录)来计算一个文件相对于另一个文件的路径。 下面是一个示例函数,使用 `realpath` 和 `dirname` 来计算相对路径: ```bash #!/bin/bash # 函数:get_relative_path <target> <base> # 返回:从 base 到 target 的相对路径 get_relative_path() { local target="$1" local base="$2" # 获取绝对路径 local abs_target=$(realpath "$target") local abs_base=$(realpath "$base") # 如果目标和基础路径相同,返回 "." if [ "$abs_target" = "$abs_base" ]; then echo "." return fi # 分割路径为数组 local target_parts=($(echo "$abs_target" | tr '/' ' ')) local base_parts=($(echo "$abs_base" | tr '/' ' ')) # 找到共同前缀 local i=0 while [ "${target_parts[i]}" = "${base_parts[i]}" ]; do ((i++)) done # 计算需要向上级目录的次数 local up_dirs=$(( ${#base_parts[@]} - i )) # 构建相对路径 local rel_path="" for (( j=0; j<up_dirs; j++ )); do rel_path="../$rel_path" done # 添加剩余的目标部分 for (( j=i; j<${#target_parts[@]}; j++ )); do rel_path="${rel_path}${target_parts[j]}/" done # 去掉末尾的斜杠 echo "${rel_path%/}" } ``` ### 使用示例: ```bash file1="/home/user/project/src/main.sh" file2="/home/user/project/docs/README.md" relative_path=$(get_relative_path "$file1" "$file2") echo "Relative path: $relative_path" ``` ### 输出示例: ``` Relative path: ../src/main.sh ``` ### 说明: - 这个函数使用 `realpath` 来获取文件的绝对路径。 - 它通过比较两个路径的公共部分,计算出需要向上走多少级目录,然后加上剩下的部分。 - 最后去掉末尾的 `/`,使其更像标准的相对路径格式。 --- 如果你的系统没有 `realpath`,可以改用 `readlink -f` 替代: ```bash local abs_target=$(readlink -f "$target") local abs_base=$(readlink -f "$base") ``` 希望这对你有帮助!如果需要支持 Windows 或其他平台,请告诉我。
上一篇:
linux 远程桌面连接
下一篇:
Ping命令详解
标题录入,一次不能超过6条
留言
评论