例如:
\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.\nRun Code Online (Sandbox Code Playgroud)\n\n这是什么missing destination file operand意思?是因为?文件名\n吗?
在 Bash 中,就通过内置或外部命令执行文件操作而言,命名文件时最好避免使用哪些字符?例如,
\n\n上面的例子是否暗示?是其中之一?
我之前的帖子是否暗示新线角色就是其中之一?
\n\n从 Linux 的角度来看,文件名中可以使用的字符没有限制,这是否正确?从文件系统类型 (ext4) 的角度来看都不是?
一个绝对规则是您不能/在文件名中使用斜杠或空字节。斜杠是目录分隔符,无法转义。空字节表示名称的结尾,并且也无法转义。除此之外,Linux 上允许使用任何字符(访问与其他文件系统共享的媒体或网络资源时除外),但多个字符可能会导致问题。我认为所有现代 *BSD 也允许除 和 null 字节之外的任何字符/,但一些较旧的 unice 有更多限制。
如果您希望文件名在通用 shell 中工作而无需引用,则需要避免!"#$&\'()*;<=>?[\\]^`{|}~使用空格(空格、制表符、换行符)。~如果在最后就可以了。具体来说,在 bash 中,是^可以的,除了开头之外,在任何地方都是可以的,并且除了作为命令名称之外都是可以的(因为它会被解释为赋值)。#~=
除此之外,这里还有一些文件名可移植性建议,按重要性排序。
\n\n-(破折号/连字符)开头。命令可能会将其解释为选项。~(波浪号),因为这在许多应用程序中意味着 \xe2\x80\x9chome 目录\xe2\x80\x9d。|foo通过程序 \xe2\x80\x9d 表示foo\xe2\x80\x9cpipe 而不是 \xe2\x80\ x9c写入文件|foo\xe2\x80\x9d,同样使用foo|输出)。\\/?:*"><|\\*?[]。此外,一些可以同时作用于多个文件的应用程序将这些字符解释为通配符。txt例如myfile.txt; 有时有多个扩展名,例如myfile.txt.gz压缩 ( .gz) 文本 ( .txt) 文件。.隐藏在命令的输出和许多文件浏览器中。lsmyfile与Myfile. 传统上,文件名都是小写的,主要是因为这样更容易输入。在过去,系统通常将大写字母排在小写字母之前,因此存在以大写字母开头的文件名的传统,以使其在目录列表中排在第一位,但现代系统通常不区分大小写地对名称进行排序。坚持使用小写可以避免混乱并且更容易打字。如果您不想记住所有这些复杂的情况,这里有两个简单的规则:
\n\na\xe2\x80\x93z和数字0\xe2\x80\x93 9,加上-分隔单词,并.extension放在文件名的末尾。例如:my-file.txt-分隔单词。.extension例如:J\xc3\xb6rgs Datei.txt最后提示:对于日期,请使用 YYYYMMDD 格式(年-月日,年份为 4 位数字,月份和日期数字前导零),例如20150622-report.txt。这样,对文件名进行排序就可以按时间顺序排列。