如何在命令行中找到最近的文件夹

如何在命令行中找到最近的文件夹

假设命令 :pwd返回

~/Users/MyUser/FolderA/FolderB

我想编写一个脚本,其中我事先不知道我处于其中FolderB,因为我可能处于其中,FolderA甚至是其他一些外部文件夹中。

我的脚本驻留在FolderB,我想找到一个具有特定名称的文件夹,该文件夹(FolderC)位于FolderAFolderB

如果我搜索,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"

相关内容