gpt4 book ai didi

bash - 从 unix 树中删除路径前缀

转载 作者:行者123 更新时间:2023-11-29 09:34:48 25 4
gpt4 key购买 nike

我在 UNIX 命令中有一个要求我有一条与此类似的路径:

path/to/file/manyfiles.extensions

现在我想要输出类似于-

file/manyfiles.extensions

现在我可以列出/path/to 和/path 将它们一一删除。

但我可能只会得到“/path/to”作为我的输入,我必须在一个命令中将它们从树中删除。

您可能认为我可以列出 2 个要删除的文件夹,但在很多情况下我得到的结构具有 12-13 个子文件夹,在许多情况下我只需要第一个和最后一个文件夹。

例如 - `源文件 - 目标/类/

删除前缀 - 目标`

结果:

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/ 在此处的输出路径中出现两次,因此结果不同。

在您的情况下,模式类似于 path/to 和路径 path/to/file/manyfiles.extensions,因此以下其中一项可行,取决于你是否需要贪心:

path=path/to/file/manyfiles.extensions
path=${path#*path/to/} # assigns "file/manyfiles.extensions" to $path

path=path/to/file/manyfiles.extensions
path=${path##*path/to/} # assigns "file/manyfiles.extensions" to $path

作为引用,请阅读 Bash parameter expansion .

关于bash - 从 unix 树中删除路径前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20614157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com