这个问题是由关于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 …
我hello world在我的主目录中创建了一个文本文件。通过 shell,我试图用rm命令删除它。但是,当我执行rm hello worldshell 时,它认为我正在尝试删除两个单独的文件,一个名为“hello”,另一个名为“world”。我该如何正确地做到这一点?
1 '2 3' 4 5
在Linux下如何删除一个名为的文件?我用过的方法都没有效果。