我有一些最初包含不同目录路径的字符串,其中第二个和倒数第二个子目录的长度都可能不同,就像这样
/home/Leo/Work/CMI/ARCH/MWS/Disks
/home/Cleo/Work/CMI/ARCH/BK/Disks
我想裁剪前5个子目录,只显示最后2个,如下所示。
echo "/MWS/Disks"
echo "/BK/Disks"
有一种方法可以从初始字符串中删除前5个子目录,即将每个字符左移,直到两个字符串以倒数第二个“/”开头。
Bash初学者指南描述了一个内置的shift
命令,它左移命令中的位置参数并丢弃未使用的参数。但是不清楚是否可以使用它来从上述字符串中删除前5个子目录。
在Bash中,如何缩短这些字符串,最好不使用循环?
澄清
从评论中可以看出需要更多的上下文。我的Bash脚本从8英寸软盘镜像中恢复历史Mdos和Qdos文件,并将文件保存到硬盘上的目录中。
不管好坏,我创建了一个定制方案,使用3个字符的变量名存储目录路径,其中每个名称都是当前目录路径部分的首字母缩写。
例如,在以下路径中,MWC
是 $MY/Work/CMI
的首字母缩写。
MY="$USER"
MWC="C:/cygwin64/home/$MY/Work/CMI"
cd "$MWC"
pwd
C:/cygwin64/home/$MY/Work/CMI
同样,三个字符的变量指向树形结构中更高层次的下一个子目录。
WCA="$MWC/ARCH"
即:
C:/cygwin64/home/$MY/Work/CMI/ARCH
,是一个存档所有者图库的路径。随着目录路径的加长,3个字符的变量可通过在列表中保留空格来轻松识别路径。然而,每当我的脚本引用路径时,完整路径都会出现。因此需要裁剪对最终用户无用的字符串部分。
echo /home/Leo/Work/CMI/ARCH/MWS/Disks | sed 's#^\(/[^/]*\)\{5\}##'
- David Lukas