我在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
小智.. 8
如果我正确理解您的问题,您想要删除路径上的某个给定前缀.给定声明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
要么
path=path/to/file/manyfiles.extensions path=${path##*path/to/} # assigns "file/manyfiles.extensions" to $path
供参考,请阅读Bash参数扩展.
如果我正确理解您的问题,您想要删除路径上的某个给定前缀.给定声明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
要么
path=path/to/file/manyfiles.extensions path=${path##*path/to/} # assigns "file/manyfiles.extensions" to $path
供参考,请阅读Bash参数扩展.