在 Bash 中使用时,最好避免在文件名中使用字符,例如“?”

Tim*_*Tim 1 bash filenames

    \n
  1. 例如:

    \n\n
    $ ls -l\ntotal 344\n-r-------- 1 t t 145657 Mar 11 01:53 joeltest-slides.pdf\n-rw-rw-r-- 1 t t 166814 Mar 11 01:55 The Joel Test: 12 Steps to Better Code? by Joel Spolsky.pdf\ndrwx-w--w- 2 t t   4096 Sep 19  2012 The Joel Test 12 Steps to Better Code_files\n-rw--w--w- 1 t t  31940 Feb 12  2011 The Joel Test 12 Steps to Better Code.html\n$ mv The\\ Joel\\ Test\\:\\ 12\\ Steps\\ to\\ Better\\ Code{                                                                                                                 \n\\ by\\ Joel\\ Spolsky.pdf,.pdf}\nmv: missing destination file operand after \xe2\x80\x98The Joel Test: 12 Steps to Better Code{\xe2\x80\x99\nTry \'mv --help\' for more information.\n
    Run Code Online (Sandbox Code Playgroud)\n\n

    这是什么missing destination file operand意思?是因为?文件名\n吗?

  2. \n
  3. 在 Bash 中,就通过内置或外部命令执行文件操作而言,命名文件时最好避免使用哪些字符?例如,

    \n\n

    上面的例子是否暗示?是其中之一?

    \n\n

    我之前的帖子是否暗示新线角色就是其中之一?

    \n\n

    我之前的 帖子是否暗示空白就是其中之一?

  4. \n
  5. 从 Linux 的角度来看,文件名中可以​​使用的字符没有限制,这是否正确?从文件系统类型 (ext4) 的角度来看都不是?

  6. \n
\n

Gil*_*il' 5

一个绝对规则是您不能/在文件名中使用斜杠或空字节。斜杠是目录分隔符,无法转义。空字节表示名称的结尾,并且也无法转义。除此之外,Linux 上允许使用任何字符(访问与其他文件系统共享的媒体或网络资源时除外),但多个字符可能会导致问题。我认为所有现代 *BSD 也允许除 和 null 字节之外的任何字符/,但一些较旧的 unice 有更多限制。

\n\n

如果您希望文件名在通用 shell 中工作而无需引用,则需要避免!"#$&\'()*;<=>?[\\]^`{|}~使用空格(空格、制表符、换行符)。~如果在最后就可以了。具体来说,在 bash 中,是^可以的,除了开头之外,在任何地方都是可以的,并且除了作为命令名称之外都是可以的(因为它会被解释为赋值)。#~=

\n\n

除此之外,这里还有一些文件名可移植性建议,按重要性排序。

\n\n
    \n
  • 文件名不要以-(破折号/连字符)开头。命令可能会将其解释为选项。
  • \n
  • 不要使用首字母~(波浪号),因为这在许多应用程序中意味着 \xe2\x80\x9chome 目录\xe2\x80\x9d。
  • \n
  • 更一般地,不要以标点符号开头或结尾,因为许多应用程序为这些符号分配了特殊含义(例如,|foo通过程序 \xe2\x80\x9d 表示foo\xe2\x80\x9cpipe 而不是 \xe2\x80\ x9c写入文件|foo\xe2\x80\x9d,同样使用foo|输出)。
  • \n
  • 如果您要与 Windows 用户交换文件,或将文件放在可移动媒体上,请不要使用 Windows 不支持的字符:\\/?:*"><|
  • \n
  • 不要使用不可打印的字符(例如控制字符)、制表符或换行符。您甚至无法在许多界面中输入它们。
  • \n
  • 一些写得不好的 shell 脚本可能会因为空格以及通配符而卡住\\*?[]。此外,一些可以同时作用于多个文件的应用程序将这些字符解释为通配符。
  • \n
  • 如果您要与旧计算机或使用不同语言的人交换文件,尤其是用非拉丁字母书写的语言,他们可能会使用不同的字符编码。保证ASCII字符在任何地方都可用并且以相同的方式编码。
  • \n
  • 许多应用程序使用文件扩展名, 来确定它们支持哪些文件以及如何打开它。系统还使用扩展名来确定使用哪个应用程序打开文件。因此,请将扩展保留在适当的位置。扩展名是最后一个点之后的部分,txt例如myfile.txt; 有时有多个扩展名,例如myfile.txt.gz压缩 ( .gz) 文本 ( .txt) 文件。
  • \n
  • 默认情况下,以 开头的文件名.隐藏在命令的输出和许多文件浏览器中。ls
  • \n
  • Unix 区分大小写:myfile与Myfile. 传统上,文件名都是小写的,主要是因为这样更容易输入。在过去,系统通常将大写字母排在小写字母之前,因此存在以大写字母开头的文件名的传统,以使其在目录列表中排在第一位,但现代系统通常不区分大小写地对名称进行排序。坚持使用小写可以避免混乱并且更容易打字。
  • \n
\n\n

如果您不想记住所有这些复杂的情况,这里有两个简单的规则:

\n\n
    \n
  • 最大安全性:坚持使用字母a\xe2\x80\x93z和数字0\xe2\x80\x93 9,加上-分隔单词,并.extension放在文件名的末尾。例如:my-file.txt
  • \n
  • 更具可读性:在文件名末尾使用英文或您自己的脚本中的字母和数字,加上空格或-分隔单词。.extension例如:J\xc3\xb6rgs Datei.txt
  • \n
\n\n

最后提示:对于日期,请使用 YYYYMMDD 格式(年-月日,年份为 4 位数字,月份和日期数字前导零),例如20150622-report.txt。这样,对文件名进行排序就可以按时间顺序排列。

\n