使用“ls”命令列出文件时,我得到以下信息。
-rw-rw-r-- 1 vineesh vineesh 2026 Nov 28 15:48 cdfg_ulit_89.txt?
-rw-rw-r-- 1 vineesh vineesh 1215 Nov 28 15:48 cdfg_ulit_8.txt?
-rw-rw-r-- 1 vineesh vineesh 1209 Nov 28 15:48 cdfg_ulit_90.txt?
-rw-rw-r-- 1 vineesh vineesh 3820 Nov 28 15:48 cdfg_ulit_9.txt?
这是什么意思?
答案1
当输出到达终端设备时,大多数ls
实现的行为就像-q
选项已传递给它们一样。
使用-q
,ls
将所有不可打印字符呈现为?
这里,不可打印的字符可能是回车符(又名 CR 又名\r
)。例如,如果您运行xargs touch < file.txt
并file.txt
包含文件名列表,但使用 MS-DOS CR-LF 行分隔符(并且您的xargs
实现类似于 GNU xargs
,但与 busybox 不同,xargs
不将 CR 识别为分隔符),则可能会发生这种情况。
它也可以是字面上的一个?
字符,甚至可以是一个?
后面跟着空格或其他不可见的字符(但是可打印) 人物。
要确认它是哪个字符,您可以将该输出通过管道传输到LC_ALL=C sed -n l
.
ls -l | LC_ALL=C sed -n l
然后ls
输出将是一个管道(因此不再是终端设备),因此不会启用-q
.不可打印的字符将按原样输出。将使用适当的可打印表示sed -n l
将 CR 字符呈现为\r
和其他不可打印字符。它还$
在行尾添加了 ,以便您可以发现尾随空格字符。
通过 GNU 实现ls
,您还可以使用一些--quoting-style=<STYLE>
选项,例如:
LC_ALL=C ls --quoting-style=shell-escape -l
或者
LC_ALL=C ls -Ql
短缺:
LC_ALL=C ls --quoting-style=c -l