我有一个文件的显式路径:
/aaa/bbb/ccc/ddd/eee/fff.txt
我需要cd /aaa/bbb
对ccc/ddd/eee/fff.txt
.
我首先弄清楚了:
df_test=/aaa/bbb/ccc/ddd/eee/fff.txt
cd $( echo ${df_test} | awk -F/ '{print "/"$2"/"$3}' )
然后我如何砍掉路径中的前两个步骤,然后对剩余部分进行操作?此外,我不会提前知道这些文件的深度。我可能有
/aaa/bbb/ccc/ddd.txt
/aaa/bbb/ccc/ddd/eee/fff.txt
/aaa/bbb/ccc/ddd/eee/fff/ggg/hhh/iii.txt
我只需要将目录更改为/aaa/bbb,并在剩余的相对路径上进行操作。
在标准外壳中:
"${path#/*/*/}"
是的值,path
但删除了(最短的)前导部分匹配/*/*/
,即您的尾部。然后"${path%/$tail}"
是path
一个斜线,尾部被移除。如果路径没有足够的组件,这将产生损坏的结果,因此您可能需要先检查一下。
或者,在 Bash 中,我们可以在其中使用正则表达式匹配
[[ .. ]]
并选择匹配的部分:[[ ... ]]
作为一个条件工作,所以在if
这里使用 an 来确保路径有足够的组件很简单。我个人喜欢
cut
这个:您只需将
-f
参数调整为您希望它在目录树中解析的深度。这显示了如何使用以下方法摆脱第一个两个字段
awk
:鉴于前缀是静态的,您可以使用参数扩展将其剥离: