LINUX.ORG.RU

find 2 прохода за 1

 


0

2

а может ли find выполнять условие1 действие1 и независимо от них условие2 действие2, чтобы не совершать второй проход условием2 и действием2 повторно?

что-то читаю этот нерусский ман и не пойму...


Да, через запятую:

expr1 , expr2
List; both expr1 and expr2 are always evaluated. The value of expr1 is discarded; the value of the list is the value of expr2. The comma operator can be useful for searching for several dif- ferent types of thing, but traversing the filesystem hierarchy only once. The -fprintf action can be used to list the various matched items into several different output files.

mky ★★★★★
()
$ find \( -type d -printf "%f directory \n" \) -o \
 \( -type f -printf "%f regular file\n" \)

PS: по умолчанию тесты find связаны AND, но можно и OR или запятой.

PPS: да, скобки необходимо экранировать, ибо bash их по своему понимает. Тут они не нужны(AND приорететнее OR), но полезны для удобочитаемости.

emulek
()
Последнее исправление: emulek (всего исправлений: 2)
Ответ на: комментарий от anonymous

ещё /!.

нет, "!" нормально пролезает в bash.

какой наркоман придумывал параметры find

нормальные параметры. Что тебе не нравится?

emulek
()
Ответ на: комментарий от emulek

"(" тоже «нормально пролезает»

Что тебе не нравится

что наркоманов допускают до разработки системных утилит

anonymous
()
Ответ на: комментарий от anonymous

"(" тоже «нормально пролезает»

нет

$ find /dev ( -type c -o -type b ) -printf "%f\n"
bash: syntax error near unexpected token `('

что наркоманов допускают до разработки системных утилит

дык придумай другой синтаксис, кто тебе мешает? Только вряд-ли у тебя получится что-то юзабельное.

emulek
()
Ответ на: комментарий от emulek

хм, правда работает, хотя

$ type !
! is a shell keyword

дык придумай

попов, всё уже придумано:

       -not expr
              Same as ! expr, but not POSIX compliant.
...
       expr1 -and expr2
              Same as expr1 expr2, but not POSIX compliant.
...
       expr1 -or expr2
              Same as expr1 -o expr2, but not POSIX compliant.
осталось добавить замену ( и )

anonymous
()
Ответ на: комментарий от anonymous

! is a shell keyword

это фича bash'а (точнее POSIX shell) ежели не расширяется, то передаётся as is. Например * передаётся как *, если файлов в $PWD нет (за исключением скрытых).

drb@amilo:/tmp$ mkdir d
drb@amilo:/tmp$ cd d
drb@amilo:/tmp/d$ ls *
/bin/ls: невозможно получить доступ к *: Нет такого файла или каталога
одиночный "!" тоже не расширяется.

попов, всё уже придумано

это ты «попов», а мне и POSIX устраивает.

emulek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.