wc - 设置终止字符

erc*_*rch 0 ls options utilities wc

我已经做到了:wc --files0-from=FILE让我们获得文件列表的字数。此列表中的每个条目都必须以 ASCII NUL 字符结尾。

问题:一种设置终止字符的方法,例如手动设置 NUL 或其他什么?我在这里找到了[引自info wc输出]:

... 使用 GNU find', using its-print0' 谓词生成 ASCII NUL 终止的文件名列表。

我发现有人说每个文件名都以 ASCII NUL 字符结尾。这是否适合,比如说输出ls?我知道,不应该 parsels,但是将输出写入文件以供wc其他时间读取会很好。

lge*_*get 5

ls以换行符 ( \n) 而不是 NUL ( \0)结束每个文件名(如果其标准输出不是终端)。

使用 NUL 作为分隔符列出当前目录中文件的一种方法是:

find . -maxdepth 1 -print0.

这也将匹配以句点开头的文件。要忽略它们,请使用:

find . -maxdepth 1 \! -name '.*' -print0

其他方式可能是:

ls | tr '\n' '\0'
Run Code Online (Sandbox Code Playgroud)

或者

printf '%s\0' *
Run Code Online (Sandbox Code Playgroud)

正如@ChrisDown 在他的评论中所指出的, 如果您的文件名包含在当前目录中,则只有findprintf选项才能正确完成工作\n。如果这不是你的情况(事实上,我想知道是否真的有人在文件名中使用换行符),这三个是等价的。

  • 注意`ls | tr '\n' '\0'` 和 `find 。-maxdepth 1 \! -name '.*' -print0` 并不严格等同,因为前者会破坏不是终止符的现有换行符:http://sprunge.us/MMYj (4认同)