为什么文件中显示的文件会被双引号包围,而其中的字符被单引号包围?
"insight_automation.log'.'2024-03-13"
我使用的是 Ubuntu Server 22.04.3 LTS。服务器上安装的服务台管理程序(Atlassian Jira Data Center 9.12.4,如果相关)会写入各种日志文件。一些文件被轮换,更新后,当我执行时,一些日志文件显示如上所示
~$ ls /var/[application-directory-path]/log
其他日志文件显示时不带任何引号。一些例子:
atlassian-jira.log
atlassian-jira.log.1
insight_audit.log
insight_audit.log.2024-03-05
insight_automation.log
有很多关于 Unix 系统中单引号和双引号的帖子,特别是 GNU 开发人员在带有空格的文件周围添加单引号。我对这些字符和 Unix 的细微差别有些熟悉,但这对我来说是新的,而且我在网上找不到任何解释(可能是因为很难用语言表达这个问题)。
我查看了日志记录配置文件,不良行为之间没有任何区别洞察_自动化.log轮换设置和其他日志文件。我唯一的猜测是名称中的点是不同的 Unicode 字符,其转义方式与文件名中的空格类似。也许是单点领导者、间断点或子弹头?
我确信我可以简单地解决这个问题,但知道为什么它会这样显示会有很大帮助。
答案1
(我只是在这里回答这个问题,这样您就不需要阅读链接答案中有关该功能的所有抱怨。)
最新版本的 GNU ls 默认情况下在打印到终端时将文件名用引号中的特殊字符引起来,目的是使输出明确,例如使任何尾随空格可见。在大多数情况下,它们使用单引号,但如果名称本身包含单引号,它们可能会使用双引号来包裹整个名称。
假设您正在使用 ls 的这些版本之一(如果您的系统不旧,则可能是这样),那么您的文件名是insight_automation.log'.'2024-03-13
,并且 ls 将其打印为"insight_automation.log'.'2024-03-13"
.
输出应该适合作为 shell 的输入(好吧,无论如何,Bash),所以你可以检查例如
ls "insight_automation.log'.'2024-03-13"
如果它有效,应该可以找到您的文件。
或者,如果您想ls
打印没有任何额外内容的文件名,请运行
ls -N
反而。或ls -N *\'*
仅匹配其中包含单引号的文件名。
至于为什么你的文件名要带引号,如果不查看系统的其余部分,我们就无法知道。