Вы не говорите, какая машина это, но мое первое наблюдение - Вы, не имеют строки интерпретатора в Вашем backup.sh для определения, какая программа должна запустить его. Вы хотите что-то вроде этого:
#!/bin/bash
export PATH=/bin:/usr/bin
find....your stuff..here
Теперь, тот один не решает Ваш вопрос о разрешении, но он поможет. Мог бы быть .rc файл в масштабе всей системы, который Ваша оболочка получала, который указал другую команду находки или кто знает то, что это сделало. Путем определения интерпретатора можно затем пойти посмотреть на который init файлы интерпретатора. Кроме того, Ваша среда входа в систему может иметь среду, которую не имеет сценарий.
Под впечатлением @josten, я провел сравнение по двум. Код находится на GitHub. Короче говоря1:
Время User+Sys, которое занимает cmp -s
, казалось, в большинстве случаев было несколько больше, чем время diff
. Однако, в реальном времени драйв был довольно произвольным - cmp
впереди на некоторых, diff
впереди на некоторых.
Любая разница в производительности - чистое совпадение. Используйте все, что пожелаете.
1 Изображения 1920х450, поэтому откройте их во вкладке, чтобы увидеть во всей красе.
Нет, 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
почти в два раза быстрее в реальном времени и остается быстрее при использовании повторного выполнения.
Используя похожие, но большие файлы из 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.