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 / -где будет искать? начиная с корня и включая все вложенное? тогда почему не видит созданную мною директорию?



Последнее исправление: leave (всего исправлений: 3)

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

sparks ★★★★
()

Пруфы обяснений на форуме в студию.
man find, там в восхитительном разделе EXAMPLES все разжевано.

redwagon
()

[AB] – неправильно

‘[AB]’ – правильно

futurama ★★★★★
()

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 ★★★★★
()
Ответ на: комментарий от anonymous

touch {A-Z}

невнимательность и спешка

ну это не суть. дело было в том чтобы понять как ищет find

Assembler
() автор топика
Ответ на: комментарий от 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
() автор топика
Ответ на: комментарий от vodz

спасибо вам огромное , что поправили. это важно . я не учел

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

А почему так? Слешь,-значит корень. В нем будут вложенны все директории.

/usr/src

По логике, зачем второй слешь? Корень всегда один

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

А почему так?

Потому что * парсит shell, он и передаст то, что попадает под маску. Напишите маску /*, получите с первым слешем.

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

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

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

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

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

vodz ★★★★★
()

наткнулся на тему, где одна девушка объясняла про find

Скорее всего, это была не девушка.

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

Вот это и хотелось понять. Огромное сэнькью.

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

Может не девушка, может женщина, но что женщина, это точно.

LGH
()
24 июня 2021 г.
Ответ на: комментарий от anonymous
$ bash
$ touch {A..z}
touch: cannot touch '': No such file or directory
$ ls
'['  '^'  '`'   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z
 ]    _    a    b   c   d   e   f   g   h   i   j   k   l   m   n   o   p   q   r   s   t   u   v   w   x   y   z
$

Э.. Работает-таки. Причем не только в bash, а даже в святом sh:

sh-5.1$ touch {A..z}
touch: cannot touch '': No such file or directory
sh-5.1$ ls
'['  '^'  '`'   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z
 ]    _    a    b   c   d   e   f   g   h   i   j   k   l   m   n   o   p   q   r   s   t   u   v   w   x   y   z
sh-5.1$
x86-
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.