Aqui está uma função que encontra o primeiro diretório existente em um caminho a partir do local mais profundo do caminho.
function findConcreteDirInPath() {
local dirpath="$1"
local stop="no"
while [ $stop = "no" ] ; do
if [ -d "$dirpath" ]; then
local stop="yes"
else
local dirpath=$(dirname "$dirpath")
if [ "$dirpath" = "" ] ; then
local stop="yes"
exit 1;
fi
fi
done
echo "$dirpath"
}
Veja um exemplo de uso
aPath="/var/doo/moo"
concreteDir=$(findConcreteDirInPath $aPath)
if [ $concreteDir != "." ]; then
echo -e "First concrete dir in \"$aPath\" path is: \"$concreteDir\""
# Check whether current user have write permissions for the directory
if [ -w $concreteDir ]; then
echo -e "\"$(whoami)\" user can write in \"$concreteDir\""
else
echo -e "\"$(whoami)\" user can NOT write in \"$concreteDir\""
fi
else
echo -e "No concrete dir for the given \"$aPath\" path"
fi