Будет ли терминал отображать индикатор выполнения при копировании с помощью «cp»?


33

Можно ли отображать индикатор выполнения при копировании файлов в Терминале с помощью cp?


2
... вы также можете рассмотреть возможность использования rsyncвместо.
— Асмус

Есть ли способ сделать это с помощью общего индикатора выполнения без установки каких-либо сторонних инструментов? Может быть, сценарий или что-то?
— rraallvv

Ответы:


49

Вместо этого вы можете использовать rsync.

rsync --progress /copy/from /copy/to

1
Speedwise, который быстрее, rsync или cp?
— Дэвисджик

Если все копируемые файлы не существуют в месте назначения, я не думаю, что будет заметная разница. Если некоторые файлы существуют в месте назначения, это будет отличаться, потому что rsync выполняет некоторую проверку. Rsync обычно (но не всегда) будет быстрее в этом случае.
— Багамат

2
Использование rsync -P /copy/from /copy/toравнозначно rsync --partial --progress /copy/from /copy/toотображению хода копирования, а также возобновлению передачи, если она отключена.
— gh0st

И так же, как cp, ему нужен -rфлаг, чтобы не пропускать каталоги
— Александр - Восстановить Монику

21

Во время cp, CtrlTотображает текущий процент (по крайней мере , MacOS)


это потрясающе!
— felix021

1
Причина это работает, потому что Ctrl-tпосылает SIGINFOсигналы таким же образом , что Ctrl-cпосылает SIGINTсигналы. Например, вы можете использовать цикл в другой оболочке для повторения kill -INFOрассматриваемого процесса, если вы не хотите продолжать нажимать клавиши. Поскольку это сигнал, он работает и с другими утилитами, например dd. Ctrl-tи SIGINFOунаследованы от BSD.
— HTNW

1

Если вы копируете большие файлы или каталоги с помощью cp, вы можете открыть «Activity Monitor», перейти на вкладку «Disk» и найти процесс «cp». Здесь вы можете отслеживать, сколько байтов было записано с момента последней загрузки, что дает вам приблизительное представление о ходе выполнения. (OS X 10.10).

Надеюсь, это поможет!


0
#!/bin/sh
   strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \
      | awk '{
        count += $NF
            if (count % 10 == 0) {
               percent = count / total_size * 100
               printf "%3d%% [", percent
               for (i=0;i<=percent;i++)
                  printf "="
               printf ">"
               for (i=percent;i<100;i++)
                  printf " "
               printf "]\r"
            }
         }
         END { print "" }' total_size=$(stat -c '%s' "${1}") count=0

Это не идеально, но это работает ... бросьте это в путь к каталогу и назовите что-то похожее ..


Подожди ... как мне заставить это работать ???
— Дэвисджик

2
Я не помню, была ли у OS X straceкоманда во время написания этого ответа (июль 2011 года), но сегодня ее точно нет.
— Тим Руддик

Есть идеи, как запустить это на macOS?
— rraallvv
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.