我对 UNIX 命令有一个要求
我有一条与此类似的路径:
path/to/file/manyfiles.extensions
现在我想要的输出类似于-
file/manyfiles.extensions
现在我可以列出 /path/to 和 /path 将它们一一删除。
但我可能只得到“/path/to”作为我的输入,并且我必须用一个命令从树中删除两者。
您可能认为我可以列出 2 个要删除的文件夹,但在许多情况下,我得到的结构具有 12-13 个子文件夹,其中在许多情况下我只需要第一个和最后一个文件夹。
例如 - `源文件 - 目标/类/
删除前缀 - 目标`
Result:
classes/my/code/HelloWorld.class
classes/my/code/HelloWorldImpl.class
classes/my/code/Main.class
如果我正确理解你的问题,你想去掉路径上的一些给定前缀。给予声明path=/a/path/to/a/directory
和一个图案*a/
您可以在 Bash 中通过两种方式去掉与该模式匹配的前缀:
echo ${path#*a/} # outputs "path/to/a/directory"
echo ${path##*a/} # outputs "directory"
第一个变体是非贪婪的,并在第一个匹配处停止,而第二个变体是贪婪的,并在模式的最长可能匹配处停止。图案*a/
此处在 out 路径中出现两次,因此结果不同。
在你的情况下,模式会是这样的path/to
和路径path/to/file/manyfiles.extensions
,因此以下其中一项可行,具体取决于您是否需要贪婪:
path=path/to/file/manyfiles.extensions
path=${path#*path/to/} # assigns "file/manyfiles.extensions" to $path
or
path=path/to/file/manyfiles.extensions
path=${path##*path/to/} # assigns "file/manyfiles.extensions" to $path
作为参考,请阅读有关Bash 参数扩展 http://mywiki.wooledge.org/BashFAQ/073.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)