小编Ric*_*hlv的帖子

“猫的无用之用”的普遍共识是什么?

当我通过管道传输多个 unix 命令(例如 grep、sed、tr 等)时。我倾向于指定正在使用 cat 处理的输入文件。所以像cat file | grep ... | awk ... | sed ....

但是最近在我的答案留下了一些评论表明这是 cat 的无用用法之后,我想我会在这里问这个问题。

我查了一下这个问题,看到了维基百科关于 UUOCThe Useless Use of Cat Award的文章,在我看来,提出的论点是从效率的角度来看的。

我在这里遇到的最接近的问题是这个:打电话给猫是浪费吗?——但这不是我要问的。

我猜 UUOC 阵营建议使用什么,cmd1 args < file | cmd2 args | cmd3 ..或者如果该命令具有从文件读取的选项,然后将文件作为参数传入。

但对我来说cat file | cmd1 ... | cmd2似乎更容易阅读和理解。我不必记住将输入文件发送到不同命令的不同方式,并且该过程逻辑上从左到右流动。首先输入,然后是第一个过程……依此类推。

我是否无法理解关于 cat 的无用使用的争论?我知道如果我正在运行一个每 2 秒运行一次并进行大量处理的 cron 作业,那么在这种情况下 cat 可能会很浪费。但除此之外,使用 cat 的普遍共识是什么?

unix command-line cat pipe

43
推荐指数
5
解决办法
9207
查看次数

ffmpeg:在看似有效的文件上“找不到 moovatom”

GoPro 摄像机将视频分割成 4GB MP4 文件。

尝试将它们与 ffmpeg 4.4.1 合并,如下所示:

ls GH017642.MP4 GH027642.MP4 | while read line; do echo "file '$line'"; done | ffmpeg -protocol_whitelist file,pipe -f concat -i - -c copy out.mp4
Run Code Online (Sandbox Code Playgroud)

失败并显示:

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x5573df8c9ec0] moov atom not found
[concat @ 0x5573df8b7ec0] Impossible to open 'pipe:GH017642.MP4'
pipe:: Invalid data found when processing input
Run Code Online (Sandbox Code Playgroud)

不过,“moov”似乎确实存在于该文件中:

> ffmpeg -v trace -i GH017642.MP4 2>&1 | grep -e type:\'mdat\' -e type:\'moov\'
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x55a71e111dc0] type:'mdat' parent:'root' sz: 3999992669 28 4001343671
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x55a71e111dc0] …
Run Code Online (Sandbox Code Playgroud)

video ffmpeg

7
推荐指数
0
解决办法
9668
查看次数

标签 统计

cat ×1

command-line ×1

ffmpeg ×1

pipe ×1

unix ×1

video ×1