相关疑难解决方法(0)

能少保留彩色输出吗?

我能得到更少的不单色输出吗?

例如,从的输出git diff是彩色的,但git diff | less不是。

less colors

471
推荐指数
7
解决办法
17万
查看次数

为什么*不*解析`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万
查看次数

文件名中的换行符

我理解并接受防御性1 shell 脚本既谨慎又从长远来看更可持续的前提。

此处的许多文本处理问题的答案都遵循这一原则,将非正统文件名的意外情况纳入到答案中;可能包含空格、破折号和换行符。

文件名中的新行有多普遍?具体来说:

  • 是否有任何应用程序默认创建包含换行符的文件名?
  • 是否存在需要创建此类文件名的情况?
  • 或者它们主要是用户错误的实例?

[1] 意味着规划和管理尽可能广泛的场景和突发事件......

受(相当悲哀的)对这个问题的评论启发的问题

shell-script filenames newlines

26
推荐指数
2
解决办法
4595
查看次数

如何不使用递归

我正在尝试使用目录中的模式 ls 一些文件。我只想扫描第一级而不是递归。

我的脚本:

for i in $(ls $INCOMINGDIR/*$BUSSINESSDATE*)
do
  echo $i;
done
Run Code Online (Sandbox Code Playgroud)

以上命令递归扫描。如何让它只扫描一级目录?

ls bash shell-script

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

为什么 *nix 文件系统支持带换行符的文件名?

根据此页面

Linux 中的文件名可以包含除 (1) 正斜杠 ( / ) 之外的任何字符,正斜杠 ( / ) 保留用作根目录的名称(即包含所有其他目录和文件的目录)和目录分隔符, 和 (2) 空字符(用于终止文本段)。允许使用空格,但最好避免使用空格,因为在某些情况下它们可能与遗留软件不兼容。

太好了,这两个限制都很有意义。既然显然可以禁止在文件名中包含某些字符,为什么允许换行?据我所知,它们的唯一用途是使我们的脚本复杂化。是否有正当理由在文件名中换行?

filesystems filenames newlines

10
推荐指数
1
解决办法
1069
查看次数

标签 统计

filenames ×2

ls ×2

newlines ×2

shell-script ×2

bash ×1

colors ×1

filesystems ×1

less ×1

shell ×1