?在文件末尾,同时使用“ls”列出文件

?在文件末尾,同时使用“ls”列出文件

使用“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.txtfile.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

相关内容