|
|
1
3031
首先,获取不带路径的文件名:
或者,您可以将焦点放在路径的最后一个“/”,而不是“.”,即使您有不可预知的文件扩展名,它也可以工作:
您可能需要检查文档:
|
|
2
545
有关详细信息,请参阅 shell parameter expansion 在bash手册中。 |
|
|
3
320
通常您已经知道扩展名,因此您可能希望使用:
例如:
我们得到
|
|
|
4
130
您可以使用POSIX变量的魔力:
如果你的文件名是这样的,有一个警告
(您可以使用临时变量:
) 这个 site 解释更多。
|
|
|
5
67
如果文件没有扩展名或文件名,这似乎不起作用。这是我正在使用的;它只使用内置文件,处理更多(但不是全部)病理文件名。
下面是一些测试案例: $ basename-and-extension.sh / /home/me/ /home/me/file /home/me/file.tar /home/me/file.tar.gz /home/me/.hidden /home/me/.hidden.tar /home/me/.. .
/:
dir = "/"
base = ""
ext = ""
/home/me/:
dir = "/home/me/"
base = ""
ext = ""
/home/me/file:
dir = "/home/me/"
base = "file"
ext = ""
/home/me/file.tar:
dir = "/home/me/"
base = "file"
ext = "tar"
/home/me/file.tar.gz:
dir = "/home/me/"
base = "file.tar"
ext = "gz"
/home/me/.hidden:
dir = "/home/me/"
base = ".hidden"
ext = ""
/home/me/.hidden.tar:
dir = "/home/me/"
base = ".hidden"
ext = "tar"
/home/me/..:
dir = "/home/me/"
base = ".."
ext = ""
.:
dir = ""
base = "."
ext = ""
|
|
|
6
42
你可以使用
例子:
您需要为basename提供要删除的扩展名,但是如果您总是在执行
这应该是您想要的:
|
|
7
28
工作正常,所以您可以使用:
顺便说一下,这些命令的工作原理如下。
命令
命令
|
|
8
26
梅伦在博客上发表评论:
使用bash,还有
输出:
|
|
9
24
你可以用
正如克莱顿休斯在一篇评论中所指出的,这对于问题中的实际例子是行不通的。所以作为一种选择,我建议使用
它通过无条件地删除最后两个(字母-数字)扩展来工作。 [安德斯·林达尔评论后再次更新] |
|
|
10
22
不用麻烦了
参考实施
Python代码:
bash实现表彰领导时期
忽略前导句号
测验以下是 忽略前导句号 实现,它应该与每个输入上的python引用实现匹配。
试验结果所有测试都通过了。 |
|
|
11
20
以下是一些备选建议(大部分在
所有用例都使用原始完整路径作为输入,而不依赖于中间结果。 |
|
|
12
16
最小和最简单的解决方案(单行)是:
|
|
|
13
13
这个 accepted answer 很好地工作 典型的 病例 但是 失败在 边缘 病例 ,即:
----------因此, 覆盖所有边缘情况的强大解决方案 呼唤一个 功能 -见下文定义; 可以返回 全部的 路径的组件 . 示例调用:
注意,输入路径后面的参数是自由选择的,位置变量
姓名
.
执行功能的测试代码:
预期输出-注意边缘情况:
|
|
14
12
我认为,如果您只需要文件名,可以尝试以下操作:
这就是全部=d。 |
|
|
15
10
可以强制剪切以显示所有字段和随后添加的字段
所以如果文件是
使用相同的逻辑,还可以使用“-”和CUT提取文件名,如下所示:
这甚至适用于没有任何扩展名的文件名。 |
|
16
7
魔术文件识别除了这堆好答案溢出问题外,我还想补充:
在Linux和其他Unixen下,有一个
魔术
命令命名
标准扩展可在
你可以创建一个 bash 用于确定右扩展的函数。 有一些(不完美的)样本:
此函数可以设置一个bash变量,稍后可以使用该变量: (这是从@petesh正确答案中得到的启发):
|
|
|
17
7
好的,如果我理解正确的话,这里的问题是如何获取具有多个扩展名的文件的名称和完整扩展名,例如,
这对我很有用:
这会给你
|
|
|
18
6
我用下面的脚本
|
|
|
19
5
这可以处理文件名中的多个点和空格,但是如果没有扩展名,则返回文件名本身。但检查起来很容易;只需测试文件名和扩展名是否相同。 当然,这个方法不适用于.tar.gz文件。然而,这可以通过两个步骤来处理。如果扩展名是gz,那么再次检查是否还有tar扩展名。 |
|
|
20
4
如何提取文件名和扩展名 fish :
Caveats: 最后一个点上的拆分,对于包含点的文件名效果很好,但对于包含点的扩展名效果不佳。见下面的例子。 用途:
有更好的方法可以做到这一点。请随意编辑我的答案以改进它。 如果您要处理的扩展集有限,并且您了解所有扩展集,请尝试以下操作:
这确实 不 第一个例子就是警告,但是您必须处理每一个案例,这样根据您期望的扩展数量,它可能会更加繁琐。 |
|
21
4
这是代码 AWK . 它可以做得更简单。但我的锥子不好。
|
|
|
22
3
简单使用
在你的情况下:
如果要测试它,请执行以下所有操作,只需删除扩展名:
|
|
|
23
2
基本上基于@mklement0的优秀,充满了随机性和实用性
巴什教
-以及其他问题的答案。我把它包装在一个小的,稍微更易于理解的,可重复使用的地方。
功能
为了我(或你的)
用法示例…
|
|
24
2
一个简单的答案: 扩展 POSIX variables answer ,请注意,您可以执行更有趣的模式。因此,对于这里详细介绍的案例,您可以简单地执行以下操作:
这将切断最后一次出现的.tar。 <某物& . 更一般地说,如果要删除的最后一个事件。 <某物& . <其他东西 然后
应该工作得很好。 上述答案的链接似乎已失效。 Here's a great explanation of a bunch of the string manipulation you can do directly in Bash, from TLDP . |
|
|
25
2
建筑从 Petesh 如果只需要文件名, 路径和扩展都可以在一条线上剥离,
|
|
26
1
从上面的答案来看,最短的一行程序可以模仿python的
假设您的文件确实有扩展名,是
|
|
|
27
1
如果你还想允许 空的 扩展,这是我能想到的最短的:
第一行解释说:它与path.ext或任何内容匹配,并将其替换为ext。如果匹配了任何内容,则不会捕获ext组。 |
|
|
28
1
imho已经给出了最好的解决方案(使用shell参数扩展),目前是最好的解决方案。 但是,我添加了一个只使用哑铃命令的命令,这是不高效的,任何严肃的人都不应该使用它:
补充 只是为了好玩 -) |
|
|
29
0
为了使dir更有用(在没有指定路径的本地文件作为输入的情况下),我执行了以下操作:
这允许您执行一些有用的操作,例如向输入文件basename添加后缀,如下所示:
|
|
|
30
0
你可以使用
获取文件名和
以获得扩展。 测试用例:
|
|
|
Lanz Joshua · 如何在PHP中从文件名中获取特定单词? 8 年前 |
|
|
arc95 · 获取名称首字母相同的所有文件或图像 8 年前 |
|
|
Luca Ricci · Grunt文件名作为变量 8 年前 |
|
|
MakkaCha · 使用批处理脚本从文件名中删除日期 8 年前 |
|
|
XtremeBaumer · FilenameFilter产生神秘结果 8 年前 |
|
|
JKU · vimrc文件中的“%:r”是什么? 8 年前 |