如何获取路径差异并将其存储在变量中

如何获取路径差异并将其存储在变量中

假设我有两条路。 Path1 是静态的,path2 是动态的。

例子:

  • 路径1= /tmp/文件夹/
  • 路径2= /tmp/文件夹/dir1/dir1_2

结果:

  • 差异= /dir/dir1_2

我想实现如上面的例子。

答案1

使用 GNU realpath,您可以执行以下操作:

$ Path1=/tmp/folder
$ Path2=/tmp/folder/dir1/dir1_2
$ realpath -m --relative-to="$Path1" -- "$Path2"
dir1/dir1_2

在 POSIX/Korn 类 shell(例如 bash)中,使用以下命令存储在变量中:

Diff=$(realpath -m --relative-to="$Path1" -- "$Path2")

通常需要注意的是,如果生成的路径以换行符结尾,它将无法正常工作。

具有zsh或非交互式bash -O lastpipe

realpath -zm --relative-to="$Path1" -- "$Path2" |
  IFS= read -rd '' Diff

可以代替使用。

答案2

如果您只是想从一个字符串中减去另一个字符串,那么您可以将较长的字符串通过管道传输到 sed 命令中以删除较短的子字符串:

$ echo $Path2 | sed "s,$Path1,,g"
dir1/dir1_2

sed 需要使用双引号。另外,由于两个字符串中都有 / 字符,因此您需要将 sed 的默认分隔符更改为其他内容,这里我们使用逗号代替。

相关内容