相关疑难解决方法(0)

为什么*不*解析`ls`(以及该怎么做)?

我一直看到引用此链接的答案明确指出“不要解析ls!” 这让我感到困扰有几个原因:

  1. 似乎该链接中的信息已被批量接受,几乎没有问题,尽管我可以在随意阅读中至少挑出一些错误。

  2. 该链接中所述的问题似乎也引发了不想找到解决方案的愿望。

从第一段:

...当你要求[ls]一个文件列表时,有一个大问题:Unix 允许文件名中的几乎任何字符,包括空格、换行符、逗号、管道符号,以及几乎任何你曾经尝试用作除 NUL 外的分隔符。...ls用换行符分隔文件名。这很好,直到您的文件名称中包含换行符。并且由于我不知道任何ls允许您使用 NUL 字符而不是换行符终止文件名的实现,这使我们无法使用ls.

无赖,对吧?如何以往我们可以处理一个换行符终止的上市数据集可能包含换行符的数据?好吧,如果这个网站上回答问题的人不是每天都做这种事情,我可能会认为我们遇到了麻烦。

事实是,大多数ls实现实际上提供了一个非常简单的 api 来解析它们的输出,我们一直在做,甚至没有意识到。您不仅可以以 null 结束文件名,还可以以 null 或您可能需要的任何其他任意字符串开头。更重要的是,您可以为每个文件类型分配这些任意字符串。请考虑:

LS_COLORS='lc=\0:rc=:ec=\0\0\0:fi=:di=:' ls -l --color=always | cat -A
total 4$
drwxr-xr-x 1 mikeserv mikeserv 0 Jul 10 01:05 ^@^@^@^@dir^@^@^@/$
-rw-r--r-- 1 mikeserv mikeserv 4 Jul 10 02:18 ^@file1^@^@^@$
-rw-r--r-- 1 mikeserv mikeserv 0 Jul 10 01:08 ^@file2^@^@^@$
-rw-r--r-- 1 mikeserv mikeserv 0 Jul …
Run Code Online (Sandbox Code Playgroud)

ls shell

249
推荐指数
8
解决办法
5万
查看次数

ls 没有 --zero 或 -0 选项是否有原因

这个问题是由关于ls'-1选项的问题以及人们反复提出问题和答案的倾向引起的,包括处理ls.

输出的这种重用ls似乎是可以理解的,例如:如果您知道如何对文件列表进行排序,ls那么您可能希望以这种方式使用输出作为其他内容的输入。

如果这些问答不包含对由行为良好的文件名(没有空格和换行符之类的特殊字符)组成的文件名列表的引用,则经常有人评论它们,指出命令序列在出现时不起作用的危险是带有换行符、空格等的文件。

find,sort和其他实用程序解决了将“困难”文件名传达给的问题,例如,xargs通过使用一个选项将文件名与 NUL 字符/字节分开,这不是文件名中的有效字符(除了/?之外的唯一一个) Unix/Linux 文件系统。

我查看了手册页ls和输出ls --help(列出了更多选项),但找不到ls(from coreutils) 有一个选项来指定 NUL 分隔的输出。它确实有一个-1选项可以解释为“用换行符分隔的输出文件名”

:是否有技术或哲学原因为什么ls没有“输出由 NUL 分隔的文件名”的--zero-0选项?

如果您执行的操作仅输出文件名(而不使用 eg -l),则可能有意义:

ls -rt -0 | xargs -r0 …
Run Code Online (Sandbox Code Playgroud)

我可能会遗漏一些为什么这不起作用的东西,或者我忽略了这个例子的替代方案,而且不是更复杂和/或模糊


附录:

这样做ls -lrt -0可能没有多大意义,但在以同样的方式find . -ls -print0不对,所以这不是一个理由不提供-0/ -z …

command-line ls shell

41
推荐指数
2
解决办法
8549
查看次数

“垂直显示‘ls’命令的输出”在哪里记录?

发现可以ls使用-1开关垂直显示命令的输出:

$ ls -1

但是在说明书上没找到ls。这是一个秘密选择吗?

ls man documentation

38
推荐指数
2
解决办法
4万
查看次数

管道 ls 与 ls -1 相同吗?

ls在几列中返回输出,而对于我尝试过的目录ls|cat返回字节相同的输出ls -1。我仍然看到ls -1答案中的管道,例如ls -1|wc -l. 有没有更喜欢的理由ls -1?为什么会...|cat改变 的输出ls

ls shell

19
推荐指数
2
解决办法
3128
查看次数

标签 统计

ls ×4

shell ×3

command-line ×1

documentation ×1

man ×1