获取从当前目录到作为参数给出的文件夹的相对路径

时间:2015-03-14 10:09:50

标签: linux bash shell relative-path

更具体一点: 假设当前目录是〜/ Bash /并且其中包含〜/ Bash / test /

myscrip.sh .  

应该输出“Generating Bash.html”

myscrip.sh ../Bash/test 

myscrip.sh test/

两者都应该获得“Generating ./test.html”

这是我尝试获取相对路径,但这是我的第一个脚本, 所以我还没有足够的资源。

#! /bin/bash 

[ $# -ne 1 ] \
  && echo -e " Script usage: \n\t `basename $0` <folder>" \
  && exit 1

[ -d "$1" ] || { echo "Folder doesn't exist" && exit 2; }

folder=`find -maxdepth 1 -name "${1%/}"`
echo -e "Generating $folder.html"

1 个答案:

答案 0 :(得分:0)

而不是

folder=`find -maxdepth 1 -name "${1%/}"`

使用

folder=$(basename "$(realpath -s "$1")")

其余的看起来还不错。

  • realpath(GNU coreutils的一部分)将为您提供作为参数给出的路径的规范化版本。 realpath .的打印方式与pwd相同,realpath ../Bash/test将为您提供/home/user/Bash/test等等。 -s参数阻止了符号链接的解析。
  • basename将最里面的目录名称与之隔离,这是您想要的名称。
  • $()执行命令替换;它类似于反引号,但更容易嵌套。

有一点需要注意:您需要检查"$1" == "/",此逻辑最终会失效(folder变为/,如果没有特殊处理,您会尝试撰写到/.html)。无论你是想禁止它还是做一些特别的事情都是你必须自己回答的设计问题。