![为什么我的命令的输出中有空行?:find ~/x/y/ | shuf > ~/桌面/z.txt](https://linux22.com/image/33023/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%E5%91%BD%E4%BB%A4%E7%9A%84%E8%BE%93%E5%87%BA%E4%B8%AD%E6%9C%89%E7%A9%BA%E8%A1%8C%EF%BC%9F%EF%BC%9Afind%20~%2Fx%2Fy%2F%20%7C%20shuf%20%3E%20~%2F%E6%A1%8C%E9%9D%A2%2Fz.txt.png)
事实证明,这个问题的原因是一个文件名有多个换行符。 (不知道这是怎么发生的。)
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