为什么cp没有wget这样的进度条?

Lam*_*mnk 68 cp wget architecture

请注意,我不问如何。我已经知道像pv和这样的选项rsync -P

我想问一下为什么cp实现进度条,至少作为标志?

Gil*_*il' 70

unix 工具的传统是仅在出现问题时才显示消息。我认为这是出于设计和实际原因。该设计旨在在出现问题时使其显而易见:您会收到一条错误消息,并且不会淹没在实际上不提供信息的消息中。实际的原因是在 unix 的早期,仍然有电传打字机;也就是说,程序的输出将打印在纸上,而您不想打印进度条。

不管是什么原因,只显示有用消息的传统在 unix 世界中根深蒂固。现代工具有时会引入进度条;在 rsync 的情况下,主要动机是 rsync 经常通过网络执行,并且网络比本地磁盘脆弱得多,因此进度条更有用。同样的道理也适用于 wget。

  • @taffer `dd` 在很多方面都很奇特(最明显的是它的选项语法),因为它不是来自 unix,而是 IBM 工具的克隆。此外,它主要用于磁带上的长任务,所以它的消息告诉你从休息中回来,不像 `cp` 在大多数情况下你只需眨眼就能得到提示。 (7认同)
  • 这个。而 `cp` 可以追溯到 1970 年代初期:它与您所能获得的一样传统。 (6认同)
  • @dmckee 那为什么`dd` 可以给出进度声明呢?`dd` 可以追溯到 1966 年 (OS/360)。如果用户希望它们变得冗长,Unix 工具可以是冗长的,但不幸的是,你不能说 cp 应该有多详细(只有一个额外的详细级别:`-v`)。 (3认同)

Cal*_*leb 18

在 unix 世界中,每个工具都旨在完成一项工作并做得很好。cp当另一个工具pv已经有了它时,为什么还要担心输出进度?同样,为什么这么多程序在没有任何分页的情况下将内容转储到屏幕上?因为已经有用于该工作的工具,例如more(或less)。为什么大多数需要编辑文件的程序不为您提供编辑器,而是外包给您$EDITOR?因为这让每个人都完成他们设计的一项任务,而用户则使用他们最喜欢的编辑器来完成所有任务。

切线地,大多数 shell 程序都被设计为将它们的输出通过管道传输到其他 shell 程序中。他们可能给出的唯一输出是在链中的下一个命令中解析出有用的东西。类似cp的程序在脚本中使用,也可以从终端手动使用,因此其输出集中在退出代码和失败或成功的文件列表上。

总是期望结合工具来实现您想要的效果。

  • 写`cp`时是否存在`pv`?这是一个很好的观点,但我有一种感觉,在这种情况下,`cp` 最初是故意编写的,没有进度输出,与其他工具无关,只是你和吉尔斯引用的其他原因。 (4认同)
  • @Jefromi:我不确定这是否重要。这不是一个关于为什么“cp”在第一次编码时是一种方式的历史问题。问题是为什么*现在*会这样。已经很多年了,有人本可以添加该功能,但显然决定不这样做。我确信其他工具的可用性会影响该决定。 (2认同)

Pád*_*ady 6

这是那些支持和反对向 cp 添加进度条选项的边缘事物之一。反对的主要论点是,您可能无法提前知道您想了解进度。Ctrl-T/SIGINFO 在 BSD 上可用于此目的,如果在 GNU/Linux 平台上可用,那么可能有更多理由触发 cp 中的进度条逻辑。同时,更通用的解决方案是使用单独的工具,例如Coreutils Progress Viewerprogress以前称为cv来显示系统上任何进程的状态。