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

33

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

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

Ответы:

49

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

rsync --progress /copy/from /copy/to
bahamat
источник
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)

Vamos
источник
это потрясающе!
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).

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

Franz
источник
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

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

Essobi
источник
Подожди ... как мне заставить это работать ???
Дэвисджик
2
Я не помню, была ли у OS X straceкоманда во время написания этого ответа (июль 2011 года), но сегодня ее точно нет.
Тим Руддик
Есть идеи, как запустить это на macOS?
rraallvv