cmp быстрее, чем разность-q?

Вы не говорите, какая машина это, но мое первое наблюдение - Вы, не имеют строки интерпретатора в Вашем backup.sh для определения, какая программа должна запустить его. Вы хотите что-то вроде этого:

#!/bin/bash
export PATH=/bin:/usr/bin

find....your stuff..here

Теперь, тот один не решает Ваш вопрос о разрешении, но он поможет. Мог бы быть .rc файл в масштабе всей системы, который Ваша оболочка получала, который указал другую команду находки или кто знает то, что это сделало. Путем определения интерпретатора можно затем пойти посмотреть на который init файлы интерпретатора. Кроме того, Ваша среда входа в систему может иметь среду, которую не имеет сценарий.

6
23.05.2017, 15:40
3 ответа

Под впечатлением @josten, я провел сравнение по двум. Код находится на GitHub. Короче говоря1:

user-sys real

Время User+Sys, которое занимает cmp -s, казалось, в большинстве случаев было несколько больше, чем время diff. Однако, в реальном времени драйв был довольно произвольным - cmp впереди на некоторых, diff впереди на некоторых.

Резюме:

Любая разница в производительности - чистое совпадение. Используйте все, что пожелаете.

1 Изображения 1920х450, поэтому откройте их во вкладке, чтобы увидеть во всей красе.

10
27.01.2020, 20:21

Нет, diff -q кажется быстрее, и вы можете легко это проверить:

$ wc x1 x2
 10000000  10000000  50000000 x1
 10000000  10000000  50000000 x2
 20000000  20000000 100000000 total

Два файла с 10 миллионами строк по 4 символа в каждом.

$ cat x1 x2 > /dev/null
$ diff x1 x2
9999999c9999999
< abcd
---
> abce

Отличается только предпоследней строкой.

$ time diff -q x1 x2
Files x1 and x2 differ

real    0m0.043s
user    0m0.012s
sys     0m0.031s

$ time cmp x1 x2
x1 x2 differ: byte 49999994, line 9999999

real    0m0.085s
user    0m0.048s
sys     0m0.036s

diff -q почти в два раза быстрее в реальном времени и остается быстрее при использовании повторного выполнения.

2
27.01.2020, 20:21

Используя похожие, но большие файлы из Anthon (100М строк, с разницей только на последней):

yes | head -n 100000000 >aa
sed '$ s/d/e/' >ab

Я получаю неразличимые тайминги для diff -q и cmp -s:

/tmp% time diff -q aa ab
Files aa and ab differ
diff -q aa ab  0.04s user 0.33s system 99% cpu 0.370 total
/tmp% time cmp -s aa ab
cmp -s aa ab  0.04s user 0.36s system 99% cpu 0.403 total

cmp медленнее, чем cmp -s. Предположительно, подсчет номеров строк является существенной нагрузкой.

/tmp% time cmp aa ab
aa ab differ: char 499999999, line 100000000
cmp aa ab  0.84s user 0.36s system 97% cpu 1.225 total

Это на Debian wheezy amd64, все запущено из оперативной памяти (на tmpfs).

cmp -s имеет то преимущество, что поддерживается всеми платформами POSIX и BusyBox.

4
27.01.2020, 20:21

Теги

Похожие вопросы