星号,反斜杠,冒号和(* \:2)中的两个是什么意思?


14

以下ls命令是什么意思?

ls -l *\:2,*T
  • ls =清单
  • -l =长(列表)
  • *T可能意味着T最后

但是那*\:2和逗号呢?

Answers:


25

*\:2,*T是要列出文件的全局模式。要了解它,我们需要记住一些事情:

  • : 必须逃脱在外壳中,成为 \:
  • 文件名可以轻松包含逗号

因此*\:2,*T,例如匹配一个名为TranscationNumber:2,EventType:XYT

编辑

从注释中,有必要(或没有)转义:需求:严格来说,逃避符号不是必须的:,但是bash会在自动完成时建议它。


3
谢谢Eugen和HBruijn。我怀疑有一些复杂的遍历模式,但实际上它应该只与冒号和逗号匹配,而在处理文件时我没有想到。现在,该命令完全有意义:列出Maildir目录中所有标记为“已删除”(T)的电子邮件文件。顺便说一句。数字2表示版本2中的Maildir(cf wiki2.dovecot.org/MailboxFormat/Maildir)。
jugmac00

11
从什么时候起就:必须逃脱?
Barmar

7
:不需要逃脱。它仅在特定情况下(用作命令时)是特殊的,而在全局模式中则不是。在\:相当于:,逃避没什么区别。
terdon

1
@Aaron,这不是完全禁止操作:shell仍将处理变量替换,尤其是赋值变量(即设置默认值):unset var; : ${var:=x}; echo $var
glenn jackman

3
@terdon和@Aaron冒号:COMP_WORDBREAKS环境变量的默认值的一部分。在Bash自动补全中,这些字符被读取行库用作单词分隔符,并且包含冒号的文件名当然应该是一个单词。因此,bash自动

14

列出所有与通配符模式匹配的文件 *:2,*T

在那里,通配符*匹配任何内容(所有可能的字符中的任意数量)
:2,是文件/目录名称中需要出现的字符。
冒号:是需要转义的特殊字符,因此是的形式\:2,
文件/目录名称必须以。结尾T

匹配的文件名是

:2,T
a:2,T
a:2,bT
abbY-$fafaf:2,<hskjhsgdfhjk>T

1
::没有什么特别的,它不需要逃脱。
凯文

@Kevin bash自动完成功能会自动以文件/目录名称模式转义冒号,因为COMP_WORDBREAK默认情况下设置的环境值列表中包含该冒号。-因此,它的确不是实际的特殊字符,但是当您在命令行上使用自动补全功能并且希望/需要用冒号匹配文件名时,确实需要对它进行转义。
HBruijn

9

正如其他人指出的那样,它将以长格式列出,包含的文件:2,并以结尾T

这看起来像在Maildir文件夹中搜索已删除(已处理)的文件。但是,为了健壮性,它应该*在末尾添加另一个。可以添加字母顺序更高的新标志,例如Dovecot会在文件末尾添加另一个字段。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.