Запустите при помощи времени согласно предложению Jon Lin:
$ time ls test
test
real 0m0.004s
user 0m0.002s
sys 0m0.002s
Вы не говорите, на каком Unix Ваши сценарии работают, но strace на Linux, связка на Солярисе/AIX, и я думаю, что социалистическая коалиция на hp-ux позволила Вам узнать много о том, что делает процесс. Мне нравится-c опция strace получить хорошую сводку:
]$ strace -c ls
test
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
89.19 0.000998 998 1 execve
10.81 0.000121 121 1 write
0.00 0.000000 0 12 read
0.00 0.000000 0 93 79 open
0.00 0.000000 0 16 close
0.00 0.000000 0 2 1 access
0.00 0.000000 0 3 brk
0.00 0.000000 0 2 ioctl
0.00 0.000000 0 4 munmap
0.00 0.000000 0 1 uname
0.00 0.000000 0 6 mprotect
0.00 0.000000 0 2 rt_sigaction
0.00 0.000000 0 1 rt_sigprocmask
0.00 0.000000 0 1 getrlimit
0.00 0.000000 0 30 mmap2
0.00 0.000000 0 8 7 stat64
0.00 0.000000 0 13 fstat64
0.00 0.000000 0 2 getdents64
0.00 0.000000 0 1 fcntl64
0.00 0.000000 0 1 futex
0.00 0.000000 0 1 set_thread_area
0.00 0.000000 0 1 set_tid_address
0.00 0.000000 0 1 set_robust_list
0.00 0.000000 0 1 socket
0.00 0.000000 0 1 1 connect
------ ----------- ----------- --------- --------- ----------------
100.00 0.001119 205 88 total
Действительно также обратите внимание, что присоединение этих программ типа трассировки может замедлить программу несколько.
Обратите внимание, что POSIX находит, делает варианты поддержки как другие команды, и --
отметить конец их как другие команды. Это -H
и -L
.
-print
, -type
... не опции, их иногда называют предикатами. Они - аргументы, вопросы порядка которых, которые появляются после путей к файлам, которые самих появляются после опций. Вы также добрались (
и !
. Вместе, они создают выражение, которое используется для определения что файлы найти.
find
не единственный. [
(иначе test
) и expr
другие команды, аргументы которых используются для создания выражения.
Как find
, [
имеет операторы, которые запускаются с -
и больше, чем одна буква (-gt
, -eq
...).
Как find
, test
имеет проблемы, где те операторы могут быть перепутаны с операндами.
find -- "$file1" "$file2" -type f
[ -f "$file1" -a -f "$file2" ]
Если $file2
!
, это - проблема с find
. Если это =
, это - проблема с (некоторыми) [
.
Для всего из find
, test
и expr
, использование опций создать выражение действительно не работало бы. Другая опция, возможно, состояла в том, чтобы оценить одну строку как выражение как awk
или sed
. как для
find f1 f2 \( -type f -mtime -1 -o ! -type f -newer x \) -exec ls -ld {} +
Сделайте:
find 'found = 0
if (typeof($f) == "f") {
if (age($f) > 1) found=1
} else if (age($f) < age("x")) found = 1
if ($found) exec_multi("ls -ld {}")' f1 f2
Но это означает реализовывать синтаксический анализатор грамматики в find
. Это также означает потенциальный кошмар заключения в кавычки для "x"
и командная строка выше.
На самом деле Исследование AT&T действительно придумывало такую команду: tw (дерево Уокер), но даже при том, что это - теперь открытый исходный код, я не знаю, что это действительно используется из AT&T.
find
является более старым, чем конвенция GNU использования --
для опций мультибуквы. GNU представил эту конвенцию повредить существующее несоответствие между программами с однобуквенными опциями, к который -bar
предназначенный эти три опции -b -a -r
, и программы с опциями нескольких-букв, к который -bar
предназначенный единственная опция тем именем. К тому времени, когда GNU прибыл, он мог влиять на будущие программы, но не изменить существующие программы такой как find
или другие, такие как утилиты X11.
find
б/У -
как префикс к предикатам и действиям, потому что они несколько похожи на опции: они - ключевые слова, часть конечного множества, которое значимо для конкретной команды. Хотя они не анализируются как опции, они лексикографически похожи на опции.
Я думаю, что не было никакого сознательного решения сделать, находят отличающимися. У меня нет ссылок кроме этой переписки, но от того, что я вспоминаю (использовавший, находят с середины восьмидесятых):
То, что необходимо понять, - то, что не было никакого стандарта для начала для определения опций и аргументов (как параметры командной строки к программам). Различные программы реализовали различные способы сделать вещи. В какой-то момент единственный тире для опций и нетире для аргументов стали, снова использовал/копировал от часто используемых команд и версии getopt
стал доступным, оба для оболочек, а также для версий в C. (Я помню имевший для компиляции моей собственной версии, потому что *отклоняют, я продолжил работать, не имел его в библиотеке).
Конечно, единственный тире, односимвольные опции соответствовали tty ограничениям (то же, которое приводит к сокращенным командам (cp
по сравнению с. copy
), но где не сам объяснительный. Разработчики находки, вероятно, приняли решение удлинить отдельный символ опции для большей ясности, а также больше, чем 26 опций символа нижнего регистра. Они сделали так перед двойным тире --
поскольку долгие опции стали популярными (середина девяностых IIRC).
Исходная страница справочника имела следующее внизу:
BUGS
The syntax is painful.
dd
другая утилита POSIX, которая имеет совсем другую конвенцию аргумента. – Shawn J. Goff 08.06.2013, 15:12