为什么我的命令的输出中有空行?:find ~/x/y/ | shuf > ~/桌面/z.txt

为什么我的命令的输出中有空行?:find ~/x/y/ | shuf > ~/桌面/z.txt

事实证明,这个问题的原因是一个文件名有多个换行符。 (不知道这是怎么发生的。)

find ~/x/y/ | shuf > ~/Desktop/z.txt

除了“z.txt”文件中出现一些空行之外,该命令的工作方式与预期基本一致。这很不方便,因为下一步是选择最上面的文件并打开它,空行显然是没有用的。我很好奇为什么会发生这种情况,以及是否有一些“标准”解决方案来解决该问题(某些选项?),或者,一些强大且简单的解决方案(删除空行的额外命令?)。

答案1

我不确定为什么空行出现在输出文件中,但您可以尝试在写入文件之前过滤掉空行。

find ~/x/y/ | shuf | grep -v '^$' > ~/Desktop/z.txt

为了追踪空行的来源,请尝试find单独运行。

find ~/x/y/ > ~/Desktop/z.txt

中是否出现空行z.txt?如果是这样,它们很可能是由 创造的find


您可以使用零终止项而不是换行符终止项。当您从列表中选择第一项时,只需使用从第一个字符到第一个空字符的文本。

find ~/x/y/ -print0 | shuf -z > ~/Desktop/z.txt

答案2

shuf不添加空行,因此它们必须来自 的输出find。这表明该目录中存在名称包含两个连续换行符的文件。您可以使用命令查看它们是什么

find ~/x/y/ -name '*
*' -print -exec echo '========'

或者

find ~/x/y/ -name '*
*' -exec ls -q

要使用命令处理包含换行符的文件名shuf,请使用空字节作为分隔符。

find ~/x/y/ -print0 | shuf -z

相关内容