Будет ли терминал отображать индикатор выполнения при копировании с помощью «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.