it-swarm.cn

Unix文件命名约定

我想知道Unix中文件的命名约定是什么?我对此不确定,但我认为也许应该遵循一项通用的命名约定?

例如,我要命名一个文件:backuppart 2random

我应该这样做吗:

backup_part2_random

OR

backup-part2-random

OR

backup.part2.random

我希望问题清楚。基本上,我想选择一种符合Unix哲学的格式。

67
user4740

.用于分隔文件类型扩展名,例如foo.txt

-_用于分隔逻辑字,例如my-big-file.txt或有时是my_big_file.txt-更好,因为您不必按Shift键(至少使用标准的美国英语PC键盘),其他人则更喜欢_,因为它看起来更像一个空格。

因此,如果我理解您的示例,则backup-part2-randombackup_part2_random将最接近正常的Unix约定。


CamelCase通常不用于Linux/Unix系统。查看/bin/usr/bin中的文件名。 CamelCase是例外,而不是Unix和Linux系统上的规则。

NetworkManager是我想到的唯一一个使用CamelCase的示例,它是由Mac开发人员编写的。许多人抱怨这种名称选择。在Ubuntu上,他们实际上已将脚本重命名为network-manager。)

例如,在我系统上的/usr/bin上:

$ ls -d [A-Z]* | wc -w    # files starting with a capital
6
$ ls -d *_* | wc -w       # files containing an underscore
178
$ ls -d *-* | wc -w       # files containing a minus/dash
409

即使这样,也没有一个以大写字母开头的文件使用CamelCase:

$ ls -d [A-Z]*
GET  HEAD  POST  X11  Xvnc  Xvnc4
61
Mikel

更重要的是特定约定必须保持一致。选择一种样式,并坚持下去。

38
David Oneill

我对Unix/Linux文件名约定的看法:

  • Unix/Linux文件系统本身并不支持扩展的概念。文件扩展名的概念作为cpls或您使用的Shell之类的实用程序支持的东西完全存在。我相信在NTFS上也是如此,但是我可能是错的。

  • 可执行文件(包括Shell脚本)通常从不具有任何类型的扩展名。脚本将具有一个哈希行(即#!/bin/bash),该行标识应由什么程序对其进行解释。

  • 任何两个字母长的可执行文件都非常重要。因此,请勿将可执行文件命名为两个字母的文件名。 /etc中以tab结尾的任何文件也非常重要,例如fstabmtabinittab
  • 有时.d会附加到目录名称中,尤其是/etc,但这种用法并不普遍(更新: https://serverfault.com/questions/240181/what-does-the -suffix-d-mean-in-linux
  • rc广泛用于配置脚本或文件,无论是前置(例如rc.local)还是后缀(.vimrc
  • Unix/Linux社区从未对扩展名使用三个字符的限制,而在缩短众所周知的扩展名以适应问题时却皱眉。例如,在Unix/Linux上HTML文件的末尾不要使用.htm,而要使用.html
  • 在一组文件中,文件名有时会大写,或大写,因此它出现在目录列表的开头。经典示例是源代码包中的Makefile。仅对README这样的内容执行此操作。
  • ~用于标识备份文件或目录,如important_stuff~/etc~。许多shell会将一个单独的~扩展为$HOME
  • 库文件几乎总是以lib开头。例外是zlib,也许还有一些例外。
  • 被inetd调用的脚本有时会用前导in.进行标记,例如in.tftpd
  • vmlinuz结尾的z表示已压缩,但我从未见过其他以此方式命名的文件。
19
LawrenceC

在Unix中,文件名只是一个字符串,与DOS不同,文件名由名称和扩展名组成。因此,任何给定的文件名都是完全可以接受的。

但是许多程序仍然使用以点开头的文件后缀来区分不同的文件类型,即Apache Web Server使用后缀在答案标头中设置正确的MIME类型。

7
gelraen

两个想法:

  1. GNU编码标准Naming Variables, Functions, and Files部分中,您将找到:

    请使用下划线将名称中的单词分开,以便Emacs Word命令在其中可以很有用。坚持小写;

    尽管IMO表示“您应该使用_因为emacs”看起来有些过时,但是在他们的“标准”文档中却是如此。

  2. 让我们假设一下,我们都同意linux内核是linux项目的“必经之道”,并且在那里使用的约定可以被认为是“标准”约定。

    grep- ing Linux内核的源代码 ,您将找到以下内容:

    • 仅使用破折号的时间的44.6%
    • 54.1%下划线的时间
    • 文件使用两者的时间的1.2%

有趣的是, git的源 的破折号为85%,下划线的为3.8%,和11.1%

选择是明确的,争论不休。 ;)

个人观点:出于审美和转变的关键原因,我使用破折号。如果您在团队中工作,请投票。但是要重申一下,保持一致

* 或“ be_all and end_all”(如果您喜欢)

6
Roy Truelove

您不应在文件名中使用的字符:

| ; ,! @#$()<>/\“'`〜{} [] = +&^

您应该使用字符定界符使名称更易于阅读:

_-。 :

(尽管在某些情况下,“:”具有特殊含义)

4
Istvan

要补充其他人的意见,我只是说带重音符号的字母和许多特殊字符在文件名中是合法的,但它们可能在以下任何情况下引起问题:

  • 您与其他计算机(尤其是与其他操作系统)共享文件系统;
  • 您可以与其他人共享文件(尽管电子邮件通常可以很好地进行转换,但有时效果不佳);
  • 您可以使用Shell脚本来自动执行某些任务(空间问题特别多,尽管有许多方法可以处理它们)。
  • 您使用另一台计算机上的文件共享。

...

4
asoundmove

坚持字母数字文件名。避免使用空格或用下划线(_)代替空格。将文件名中的标点符号限制为句点(。),下划线(_)和连字符(-)。通常,文件名是小写的,但是当文件名中包含多个单词时,我会使用CamelCase。

使用扩展名指示文件类型。程序不需要扩展,因为执行位用于指示程序,并且外壳知道如何运行各种类型的程序。对于Shell脚本(.sh)和对于Perl脚本(.pl),这是常见的,但不是必需的。 Windows可执行文件扩展名.bat,.com,.scr和.exe表示Unix上的Windows可执行文件。

选择一个标准并坚持下去。但是,如果您避免它,它不会破坏一切。

隐藏(或点)文件的名称以句点开头。这些通常不会显示在目录列表中。使用“ ls -a”将点文件包括在列表中。

3
BillThor

采用 - 要么 _用于命名文件
_用于功能
.用于扩展

cat << EOF > foo-bar.sh  
foo_bar() {  
echo baz  
}  
EOF  
2
Akhil Jalagam

一种约定是使用“ _”代替空格作为单词之间的分隔符。可以使用其他字符代替空格,但是“-”和“。”的常规用法稍强一些。在路径名中,因此通常首选“ _”。

空格在路径名中是合法的,但通常避免使用,因为它们需要引用路径名(“ foo bar”)或转义空格(foo\bar)。正确编写的Shell脚本将引用可能包含空格的变量,尤其是路径名,但通常这样做是疏忽大意的,在命令行中执行一次性输入命令时,这会带来很多额外的输入。

使用“-”分隔数字集群(如时间戳或序列号)是一种在文件系统上下文之外常用的约定。使用“。”分隔表示文件类型的“文件扩展名”非常普遍,并且一些重要的工具依赖于此。例如,在Red Hat Enterprise Linux及其衍生版本RPM上的软件包管理系统希望软件包文件以“ .rpm”结尾。传统的tarball是已压缩(“ .gz”)的tar文件(“ .tar”),因此以“ .tar.gz”结尾。

因此,将它们放在一起,通常会得到类似“ home_backup_2017-07-01.tar.gz”的文件名。

2
bgvaughan

我同意大卫·奥尼尔(David Oneill)的观点,即您应该随身携带一些东西。

但是很好,如果文件可以在同一目录中排序,那么不要编号.. 10但编号 00.. 10。

在名称中使用日期时,请使用 ISO8601 之类的标准日期格式。

并且不要害怕使用多个字符来分隔名称中的逻辑部分。如果使用_(原为3 _),则以后可以简化文件名的正则表达式。

因此,您的示例可能是这样的:

backup_2011-06-19T114012___part002___random

易于阅读且易于使用脚本解析。

0
Johan

根据Unix约定,文件名中的单词可以用_-分隔。

如果您使用-,则输入起来会更容易,并且无需按SHIFT键。但是,由于-占用的空间很小,因此与_相比,阅读单词分隔有些困难。使用_分隔单词可以使它看起来更整洁,因为_占用更多空间。

在Shell脚本和其他计算机编程中,_用于多字变量,例如MY_ENVIRONMENT_FILE。使文件名也使用_保持一致:MY_ENVIRONMENT_FILE=~/my_environment_file

在Web开发中,-是文件命名的首选。原因之一可能是因为Web链接中的下划线会隐藏下划线,并且如果您手动键入Web链接可能会变得困难。

在大多数编辑器和网页中,双击都可以完全选择this_long_Word,但不能完全选择this-long-Word

0
GMaster