【问题标题】:Differentiating between file extension and hidden files beginning with a .dot区分以 .dot 开头的文件扩展名和隐藏文件
【发布时间】:2013-11-20 10:46:59
【问题描述】:

文件扩展名通常是最后一个句点之后的所有内容。如果文件名没有“.”,则它没有扩展名。当文件名以点开头时会发生什么,就像 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. 它实际上是一个 .pdf(按照文件名约定,确定它有 pdf 数据)还是一个带有 no 扩展名的文件?

【问题讨论】:

    标签: python bash filenames file-extension dotfiles


    【解决方案1】:

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

    一个文件可以有多个扩展名:

    source.tar.gz
    

    有时一个扩展代表两个的收缩:

    source.tgz
    

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

    .bashrc
    README
    ABOUT
    TODO
    

    通常,定义扩展名的唯一内容是它是文件名的尾随组成部分,跟在非初始句点之后。含义由检查文件名的应用程序指定。 PDF 阅读器可能会关注名称以.pdf 结尾的文件,但不应拒绝打开名称不以.pdf 结尾的有效 PDF 文件。

    注意

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

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

    【讨论】:

    • 谢谢!我知道这些,请参阅编辑。对于.bashrc,很明显它是主文件名,而不是扩展名。 .pdf 呢?按照同样的规则,应该说它有 no 扩展名。
    • 文件内容与其扩展名(如果有)之间是否存在任何必需的连接取决于操作系统。 .pdf 似乎 像一个带有扩展名的空文件名,因为您熟悉使用 .pdf 来指示 PDF 文件。问问自己.udn 是什么:它只是一个以句点开头的文件,还是您不熟悉的某些数据类型的扩展名?这就是为什么一个好的对话框可以让您显示所有文件,或提供用户指定的过滤器,因为对于文件的命名方式没有硬性规定。
    • 这正是我的观点。如果打开文件对话框是使用内部拆分扩展功能构建的,拆分扩展应该选择哪个?我认为它不应该是上下文相关的。
    • 文件扩展名根据定义是上下文相关的。 .pdf 可能是一个隐藏文件;它可能是一个名称不佳的 PDF 文件。没有办法说。即使是领先时期的事情也只是一种惯例;文件本身没有什么特别之处。除非另有说明,否则像 ls 这样的程序只会忽略它们。
    • 最后一条评论:句点甚至不一定表示扩展名:OS X plist 文件的名称类似于com.apple.ActivityMonitor.plist。只有plist 组件被视为扩展;它前面的所有内容都是一个带点的文件名,它被解释为谁负责创建文件以及哪个程序使用它的分层描述。
    猜你喜欢
    • 2013-12-19
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 2020-04-22
    相关资源
    最近更新 更多