Bash-从完整路径中提取每个较小的路径
我试图获取一个完整的路径目录,并从中提取每个路径。比如说Bash-从完整路径中提取每个较小的路径,bash,path,Bash,Path,我试图获取一个完整的路径目录,并从中提取每个路径。比如说 fullpath="/home/me/something/file" /home/me/something/file /home/me/something /home/me /home 我已经尝试过了,但是我还没有弄清楚如何把路径带出来 IFS=$'/' for i in $restorepath do echo $i
fullpath="/home/me/something/file"
/home/me/something/file
/home/me/something
/home/me
/home
我已经尝试过了,但是我还没有弄清楚如何把路径带出来
IFS=$'/'
for i in $restorepath
do
echo $i
if [ -d $i ]; then
echo dir exists
fi
done
unset IFS
两个问题:
您正在测试一个目录,但看起来您正在提供一个文件
没有理由取消设置IFS,因为更改不会传播到父shell。如果要重新设置为默认值以便稍后在此脚本中使用,可以将旧值保存在某个变量中并在之后重置,或者将其更改为常见值,如IFS=$'\t\n'
试试这样的
#!/bin/bash
fullpath="/home/me/something/file"
IFS='/'
for i in $fullpath; do
subpath+="$i/"
if [[ -e $subpath ]]; then
echo "$subpath"
elif [[ -e ${subpath%?} ]]; then
echo "${subpath%?}" && break
else
break
fi
done
注意,${subpath%?}切掉最后一个字符?=bash中的单字符通配符,以防输入的是文件而不是目录。此外,如果子路径不存在,则可以安全地中断循环,因为这意味着它的后代不可能存在。我已经有一段时间没有编写bash脚本了,这是一种完全不成熟且未经测试的方法,但在不知道您要做什么的情况下,我觉得您应该能够执行以下操作:
fullpath="/home/me/something/file
array=(${fullpath//// })
for i in "${!array[@]}"
do
if i <= 4
echo "$i=>${array[i]}"
done
for i in "${!array[@]}"
do
if i <= 3
echo "$i=>${array[i]}"
done
for i in "${!array[@]}"
do
if i <= 2
echo "$i=>${array[i]}"
done
for i in "${!array[@]}"
do
if i <= 1
echo "$i=>${array[i]}"
done
这可能会为您指明正确的方向。这是如何为路径创建所有必需的父目录的问题吗?如果是,请输入mkdir-p。