Обратите внимание, что я не спрашиваю, как . Я уже знаю варианты, как pv
и rsync -P
.
Я хочу спросить, почему не cp
реализован индикатор выполнения, по крайней мере, как флаг?
wget
cp
architecture
Lamnk
источник
источник
pv
иrsync -P
, см. Перемещение файлов с индикатором выполнения (в одном из ответов приведен патч, наcp
котором отображаетсяcp -g
индикатор прогресса).Ответы:
Традиция в инструментах Unix - отображать сообщения, только если что-то идет не так. Я думаю, что это как по дизайну, так и по практическим соображениям. Дизайн призван сделать это очевидным, когда что-то идет не так: вы получаете сообщение об ошибке, и оно не тонет в неинформативных сообщениях. Практическая причина в том, что в самые ранние времена Unix все еще были телепринтеры ; то есть выходные данные программ будут напечатаны на бумаге, а вы не хотите печатать индикаторы выполнения.
Безотносительно причины традиция показа только полезных сообщений вошла в мир Unix. Современные инструменты иногда вводят индикаторы выполнения; в случае rsync основной мотивацией является то, что rsync часто выполняется по сети, и сети намного более ненадежны, чем локальные диски, поэтому индикатор выполнения более полезен. То же самое относится и к Wget.
источник
cp
восходит к началу 1970-х годов: это настолько традиционный, насколько вы можете получить.dd
давать заявления о прогрессе?dd
восходит к 1966 году (OS / 360). Инструменты Unix могут быть многословными, если пользователь хочет, чтобы они были многословными, но, к сожалению, вы не можете сказать, каким должен быть многословный cp (есть только один дополнительный уровень многословия:)-v
.dd
свойственен во многих отношениях (наиболее очевидно, его синтаксис опций), потому что он не из Unix, это клон инструмента IBM. Кроме того, он в основном использовался для длинных задач на лентах, поэтому в его сообщениях говорилось, что вы должны вернуться с перерыва, в отличие от того,cp
где в большинстве случаев вы просто моргаете и получаете подсказку обратно.В мире Unix каждый инструмент предназначен для выполнения одной работы и выполнения ее хорошо. Зачем
cp
беспокоиться о выводе прогресса, когда другой инструмент, какpv
это уже сделал? В том же духе, почему так много программ сбрасывают данные на экран без нумерации страниц? Потому что уже есть инструменты для этой работы, такие какmore
(илиless
). Почему большинство программ, требующих редактирования файлов, НЕ предоставляют вам редактор, а вместо этого передают на аутсорсинг$EDITOR
? Потому что это заставляет всех выполнять одну задачу, для которой они предназначены, а пользователь использует свой любимый редактор для всех задач.Тангенциально, большинство программ оболочки разработаны так, чтобы их выходные данные передавались в другие программы оболочки. Единственный выход, который они могут дать, - это то, что было бы полезно проанализировать в следующей команде в цепочке. Подобные программы
cp
используются как в скриптах, так и вручную из терминала, поэтому его вывод сфокусирован на коде выхода и списках файлов, которые завершились неудачно или успешно.Всегда ожидайте комбинировать инструменты для достижения желаемого эффекта.
источник
pv
когдаcp
был написан? Это хороший момент, но у меня есть ощущение, что в этом случаеcp
изначально он был написан намеренно, без вывода результатов, ничего общего с другими инструментами, только по другим причинам, на которые вы и Жиль ссылаетесь.cp
был один путь, когда он был впервые закодирован. Вопрос в том, почему это так сейчас . Прошло много лет, и кто-то мог добавить функциональность, но явно решил не делать этого. Я уверен, что наличие других инструментов влияет на это решение.Это одна из тех незначительных вещей, где есть аргументы за и против добавления опции индикатора выполнения в cp. Основным аргументом против является то, что вы можете не знать заранее, что хотите знать о прогрессе. Ctrl-T / SIGINFO для этой цели доступен на BSD, и если он станет доступен на платформах GNU / Linux, то может быть больше причин для запуска логики индикатора выполнения в cp. Между тем, более общим решением является использование отдельного инструмента, такого как Coreutils Progress Viewer (
progress
ранее известный какcv
), для отображения статуса любого процесса в системе.источник