Bitte beachte, dass ich nicht frage wie . Ich kenne schon Optionen wie pv
und rsync -P
.
Ich möchte fragen, warum keine cp
Fortschrittsanzeige implementiert wird, zumindest nicht als Flagge.
wget
cp
architecture
Lamnk
quelle
quelle
pv
undrsync -P
finden Sie unter Verschieben von Dateien mit Fortschrittsbalken ( eine der Antworten zitiert einen Patch,cp
umcp -g
einen Fortschrittsindikator zu geben).Antworten:
Die Tradition in Unix-Tools besteht darin, Meldungen nur dann anzuzeigen, wenn etwas schief geht. Ich denke, dies ist sowohl aus gestalterischen als auch aus praktischen Gründen. Das Design soll deutlich machen, wenn etwas schief geht: Sie erhalten eine Fehlermeldung, und es ist nicht in nicht wirklich informativen Nachrichten ertrunken. Der praktische Grund ist, dass es in den Anfängen von Unix noch Ferndrucker gab . Das heißt, die Ausgabe von Programmen wird auf Papier gedruckt, und Sie möchten keine Fortschrittsbalken drucken.
Was auch immer der Grund sein mag, die Tradition, nur nützliche Nachrichten anzuzeigen, hat in der Unix-Welt Bestand. Moderne Tools haben manchmal Fortschrittsbalken eingeführt. Im Fall von rsync liegt die Hauptmotivation darin, dass rsync häufig über das Netzwerk ausgeführt wird und Netzwerke viel flockiger sind als lokale Datenträger. Daher ist der Fortschrittsbalken nützlicher. Gleiches gilt für wget.
quelle
cp
geht bis in die frühen 1970er Jahre zurück: Es ist so traditionell wie es nur geht.dd
man dann Fortschrittserklärungen abgeben ?dd
geht zurück auf das Jahr 1966 (OS / 360). Unix-Tools können ausführlich sein, wenn der Benutzer möchte, dass sie ausführlich sind, aber Sie können leider nicht sagen, wie ausführlich cp sein soll (es gibt nur eine zusätzliche Ausführlichkeitsstufe:)-v
.dd
ist in vielerlei Hinsicht eigenartig (am offensichtlichsten seine Optionssyntax), da es nicht von Unix stammt, sondern ein Klon eines IBM-Tools ist. Außerdem wurde es meistens für lange Aufgaben auf Bändern verwendet, sodass Sie in den Nachrichten aufgefordert wurden, aus Ihrer Pause zurückzukehren, anderscp
als in den meisten Fällen, in denen Sie nur blinzeln und Ihre Aufforderung zurückerhalten würden.In der Unix-Welt ist jedes Tool darauf ausgelegt, einen Job zu erledigen und ihn gut auszuführen. Warum sollte man sich
cp
Gedanken über die Ausgabe von Fortschritten machen, wenn ein anderes Toolpv
dies bereits tut? Warum werden so viele Programme ohne Paginierung auf dem Bildschirm angezeigt? Weil es für diesen Job bereits Tools wiemore
(oderless
) gibt. Warum stellen Ihnen die meisten Programme, die das Bearbeiten von Dateien erfordern, KEINEN Editor zur Verfügung und lagern diesen$EDITOR
stattdessen aus? Denn so bleibt jedem die Aufgabe, für die er konzipiert wurde, und dem Benutzer, der für alle Aufgaben seinen bevorzugten Editor verwendet.Tangential sind die meisten Shell-Programme so konzipiert, dass ihre Ausgabe in andere Shell-Programme geleitet wird. Die einzige Ausgabe, die sie wahrscheinlich geben, sind Dinge, die nützlich wären, um sie im nächsten Befehl in der Kette zu analysieren. Programme wie
cp
werden sowohl in Skripten als auch manuell von einem Terminal aus verwendet, sodass sich die Ausgabe auf den Exit-Code und die Liste der fehlgeschlagenen oder erfolgreichen Dateien konzentriert.Erwarten Sie immer, Werkzeuge zu kombinieren, um den gewünschten Effekt zu erzielen.
quelle
pv
es wanncp
wurde geschrieben? Es ist ein guter Punkt, aber ich habe das Gefühl, dass in diesem Fallcp
ursprünglich absichtlich ohne Fortschrittsausgabe geschrieben wurde, nichts, was mit anderen Werkzeugen zu tun hat, nur die anderen Gründe, die Sie und Gilles anführen.cp
es eine Möglichkeit gab, als es zum ersten Mal codiert wurde. Die Frage ist, warum es jetzt so ist . Es ist schon viele Jahre her und jemand hätte die Funktionalität hinzufügen können, hat sich aber eindeutig dagegen entschieden. Ich bin sicher, dass die Verfügbarkeit anderer Tools diese Entscheidung beeinflusst.Dies ist einer der Randbereiche, in denen es Argumente für und gegen das Hinzufügen einer Fortschrittsbalkenoption zu cp gibt. Das Hauptargument dagegen ist, dass Sie möglicherweise nicht im Voraus wissen, dass Sie den Fortschritt wissen möchten. Ctrl-T / SIGINFO ist für diesen Zweck auf BSD verfügbar, und wenn dies auf GNU / Linux-Plattformen verfügbar wird, gibt es möglicherweise mehr Gründe dafür, die Fortschrittsbalkenlogik in cp auszulösen. In der Zwischenzeit besteht eine allgemeinere Lösung darin, ein separates Tool wie den Coreutils Progress Viewer (
progress
früher bekannt alscv
) zu verwenden, um den Status aller Prozesse auf dem System anzuzeigen.quelle