如此处所述:
文件名中的换行符\n
是一个问题,当管道输出ls
到另一个命令时,因为换行符会将一个文件名分成两行。
手册页的ls
状态:
-b, --escape print C-style escapes for nongraphic characters
-q, --hide-control-chars print ? instead of nongraphic characters
-1 list one file per line. Avoid '\n' with -q or -b
所以我的解释是,使用-b
or-q
选项可以解决这个问题。或者还有没有被这种方法覆盖的案例?
下一个命令将如何通过管道输出来处理这些转义?如何在目录树中找到更深的文件?是否可以在非 Linux 的 POSIX 上运行?GNU 版本的 ls 默认情况下会进行一些过滤,但这并不是在每个系统上都有。
David Wheeler 的文章Fixing Unix/Linux/POSIX Filenames: Control Characters (such as Newline), Leading Dashes, and Other Problems讨论了一些问题。许多软件都假设各种控制字符(如 \n 或 \t)可以用作分隔符,因此带有这些字符的文件可能会出现问题。但是,有一些方法可以处理几乎包含任何字符的文件名:
如果您可以阻止包含 \n 的文件,您可以使用设置 shell 输入字段分隔符的技巧,只说换行符和制表符。然后在 shell 脚本中使用文件名变量。