假设命令 :pwd
返回
~/Users/MyUser/FolderA/FolderB
我想编写一个脚本,其中我事先不知道我处于其中FolderB
,因为我可能处于其中,FolderA
甚至是其他一些外部文件夹中。
我的脚本驻留在FolderB
,我想找到一个具有特定名称的文件夹,该文件夹(FolderC)
位于FolderA
FolderB
如果我搜索,find ~ iname "FolderC"
我会找到各种我不想要的结果。我只想要一个与我的脚本名称最接近的目录。
哪一行可以帮助我找到它?
答案1
使用绝对路径,而不是相对路径。
不要使用 ~/...,而要使用 /home/...(对于 Windows,则使用 C:/...)。这样可以避免难以找到相对于您所在位置的文件。
答案2
我的脚本位于 FolderB 中,我想找到一个具有特定名称(FolderC)的文件夹,该文件夹与 FolderB 一起位于 FolderA 中
首先你需要找到脚本所在的目录。然后,您需要上移一个目录并查找 FolderB:
dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
folderc="$dir/../FolderC"
修改后问题的答案
我不知道 FolderC 是否位于脚本的正上方,它可能位于 2、3 个甚至更多目录上方,...
这将在所有父目录中搜索 FolderC 直至根目录:
dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
while echo dir=$dir; [ $dir != / ] && dir=$(dirname "$dir")
do
b="$dir/FolderC"
[ -d "$b" ] && break
false
done || echo "Fail no such directory"
echo "The nearest FolderC is $b"