findutils 4.4.x в Ubuntu не позволяет мне указать параметр `глубины`
Миссия: перечислить всех прямых потомков каталога, которые являются самим каталогом.
На BSD (Mac OS), find . -type d -depth 1
работает.
Это вывод Ubuntu 12.04 (GNU findutils 4.4.2):
$ find . -type d -depth 1
find: warning: you have specified the -depth option after a non-option argument -type,
but options are not positional (-depth affects tests specified before it as well as
those specified after it). Please specify options before other arguments.
find: paths must precede expression: 1
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
Хорошо, следующая попытка:
$ find . -depth 1 -type d
find: paths must precede expression: 1
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
Хм, ну, может быть, он хочет...
$ find -depth 1 . -type d
find: paths must precede expression: 1
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
Видимо, нет, WTF, если это нужно...
$ find . -depth=1 -type d
find: unknown predicate `-depth=1'
Нет, это было очевидно Итак, давайте попробуем в крайнем случае...
$ find . -mindepth 1 -maxdepth 1 -type d
<my directories>
Удачи, успехов! Но почему...?
И, в качестве дополнительного вопроса, почему -mindepth 1 -maxdepth 1
намного быстрее чем -depth 1
на BSD / OSX?
2 ответа
-depth
опция не принимает аргумент:
-depth Process each directory's contents before the directory itself.
Варианты как -name
, -type
ожидайте, что последует что-то, это не относится к -depth
, Это больше логический вариант.
Разные версии find
использовать -depth
Первоначально означать совершенно разные вещи:
-depth
означает выполнить поиск в глубину (то есть посетить содержимое до самого каталога). Это отличается от большинства праймериз, так как не определяет, какие файлы совпадают, а как выполняется поиск. Насколько я знаю, все версииfind
поддержать это.-depth n
означает сопоставлять только элементы на глубине n (то есть то, что вы хотите). Это совершенно другое значение от-depth
когда за ним не следует число, которое может быть очень запутанным. Кроме того, не все версииfind
поддерживает это (OS X делает, GNU findutils, очевидно, не делает).
-find n
Первичный полезен, но, к сожалению, не переносим. Если вам нужна мобильность, я думаю, что вы застряли с -mindepth n -maxdepth n
,