LINUX.ORG.RU

find

 ,


2

2

наткнулся на тему, где одна девушка объясняла про find , какому-то форумчанину. я немного не догнал, но задавать там вопросы не стал. решил спросить здесь. потому что тут, как я думаю, знают , вернее должны знать об этом лучше.

#mkdir dr
#touch {A..z}
#pwd 
/root 

#find / -type f -regex [AB]

не найдет. но если сделать вот так

#find * -type f -regex [AB]

то заглянет даже в созданные мной каталоги. но этого нет в синтаксисе.

как это работает вообще?

find / -где будет искать? начиная с корня и включая все вложенное? тогда почему не видит созданную мною директорию?

*’ку bash сам заменит на содержимое текущей директории, find / будет искать с корня рекурсивно и найдёт всё, type f - заставит искать только файлы, если ты создал директорию и чтото в ней не находится значит кривая регулярка

sparks ★★ ()

touch {A..z}

В bash такое не работает, у тебя там что-то хипстерское.

заглянет даже в созданные мной каталоги

Какие каталоги? Ты создал один и он пустой.

-regex

Это тоже не везде работает. Может, твоя оболочка find переопределяет?

тогда почему не видет

Поменьше используй всякую модную и молодёжную хрень, тогда всё буде видеть.

anonymous ()

как это работает вообще?

Раскрытие «*» — глоббинг — выполняет оболочка.
find эту «*» не получит, он получит список каталогов и файлов, вот этот: echo *

Ни (1), ни (2) файлов A, B не найдет, поскольку
 — в первом случае regex не совпадает с /dir/A и /dir/B
 — во втором — с dir/A, dir/B

В обоих случаях совпадёт с -regex '.*/[AB]'

Так что, скорее всего, пример процитирован неверно.

bormant ★★★★★ ()
Ответ на: комментарий от Assembler

mkdir d
cd d
>c.cpp
cd 
pwd 
/root

find / -type f -name "c.cpp" // выдаст /root/d/c.cpp
find * -type f -name "c.cpp" // выдаст /d/c.cpp
вот почему у меня вылетали ошибки когда я пытался передать конвеером на другую команду вывод find 


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

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

Сами выдумали? Мы пишем один раз, первый слеш в пути - это корень, последующие - это символ разделитель, который не может быть в именах файлов и каталогов.

vodz ★★★★★ ()