如何在bash中拆分目录名以在路径中的所有目录中进行递归调用
问题描述:
对于令人困惑的标题,我很难描述问题。如何在bash中拆分目录名以在路径中的所有目录中进行递归调用
我提供给我两个值,第一个是恒定的,而第二个可以是任意数量的文件夹级别的
BASE = application/classes
FOLDERS = types/ads
基于这些,我需要像下面这样运行命令(在按此顺序排列):
verifyDir application/classes
verifyDir application/classes/types
verifyDir application/classes/types/ads
我也可以只通过所有的目录verifyDir
如果这是比较容易
verifyDir application/classes application/classes/types application/classes/types/ads
这是在一个makefile中,所以使用gmake的函数是可以接受的。
请不要回答以重建我正在做的事情的建议。解释为什么我需要这个会花费太长时间。
答
我不是高手gmake命令,这样我就可以提出一个方式如何实现,使用的外壳,可能是它可以帮助你实现,在GNU化妆...
BASE=application/classes
FOLDERS=types/ads
verifyDir $BASE
NEWBASE=$BASE
for c in `echo $FOLDERS | tr "/" " "`; do
NEWBASE="$NEWBASE/$c"
verifyDir $NEWBASE
done
答
安德鲁的建议是大。有人在工作中想出了另一种解决办法,所以我会把它放在这里作为参考,因为它使用不同的技术(IFS,从而改变默认的文字分隔符)
BASE="some/base/dir"
TAIL="fold1/fold2/fold3"
ALLPATHS="$BASE"
IFS=/
for X in $TAIL; do
ALLPATHS="$ALLPATHS $ALLPATHS/$X";
done;
unset IFS;
verifyDir $ALLPATHS;
+0
不错!我忘记了IFS。 – 4ndrew 2012-01-11 08:56:14
答
另一种解决方案,使用GNU使功能
BASE = application/classes
FOLDERS = types/ads/more/hierarchy/here
FOLDERS_SPLIT := $(subst /, ,$(FOLDERS))
FOLDERS_ITER :=
FOLDERS_TREE := $(foreach FOLDER, $(FOLDERS_SPLIT), $(eval FOLDERS_ITER := $(FOLDERS_ITER)/$(FOLDER)) $(BASE)$(FOLDERS_ITER))
all:
@echo FOLDERS_TREE $(FOLDERS_TREE)
@downvoter:这个问题出了什么问题?帮助我改进它。 – 2012-04-24 20:52:34