区分文件扩展名和以.dot开头的隐藏文件

时间:2013-11-20 10:47:00

标签: python bash filenames file-extension dotfiles

文件扩展名通常是最后一段时间之后的所有内容。如果文件名没有“。”,则没有扩展名。当文件名以点开头时会发生什么,如linux中的隐藏文件那样?

在python中,该文件没有扩展名......

>>> os.path.splitext("base.ext")
('base', '.ext')
>>> os.path.splitext(".ext")                                                                                              
('.ext', '')

bash中的常用方法产生另一个结果,其中只有一个扩展而没有基本部分(Extract filename and extension in Bash)......

>>> filename=".ext"
>>> extension="${filename##*.}"
>>> base="${filename%.*}"
>>> echo $base

>>> echo $extension
ext

代码应该如何处理这样的文件名?有标准吗?每个操作系统有什么不同吗?或者只是哪种最常见/一致?

[编辑]
假设你有一个只是“.pdf”的文件。例如,一个打开的对话框默认列出它没有1.显示隐藏文件和2.允许所有文件扩展名?

  1. 这是一个隐藏文件 - 它以句号
  2. 开头
  3. 它实际上是.pdf(按文件名约定,确定它有pdf数据)还是 no 扩展名的文件?

1 个答案:

答案 0 :(得分:1)

基于POSIX的操作系统中的文件扩展名没有先天的意义;他们只是一个会议。更改扩展名不会改变文件本身的任何内容,只会改变用于引用它的名称。

文件可以有多个扩展名:

source.tar.gz

有时单个扩展代表两个收缩:

source.tgz

其他文件可能根本没有扩展名:

.bashrc
README
ABOUT
TODO

通常,唯一定义扩展的是它是一个跟随非初始周期的文件名的尾随组件。检查文件名的应用程序分配含义。 PDF阅读器可能会关注名称以.pdf结尾的文件,但它不应拒绝打开名称不包含的有效PDF文件。

请注意

extension="${filename##*.}"

只是一个参数扩展运算符的应用程序,如果文件名不以句点开头,它只返回(最终)扩展名。它不是扩展运算符,它是一个前缀删除运算符。