find -maxdepth 0 не возвращает мне никаких результатов

find -maxdepth 0 не возвращает мне никаких результатов

Я пытаюсь понять, как использовать find -maxdepth 0option.

У меня следующая структура каталогов.

--> file1
--> parent
          --> child1
                   --> file1
                   --> file2
          --> child2
                   --> file1
                   --> file2
          --> file1

Теперь я выполняю findкоманду, как показано ниже.

find ./parent -maxdepth 0 -name "file1"
find ./ -maxdepth 0 -name "file1"
find . -maxdepth 0 -name "file1"

Ни при одной из вышеперечисленных findкомандфайл1возвращается.

На странице руководства findя вижу следующую информацию.

-maxdepth 0 означает применять тесты и действия только к аргументам командной строки.

Я искал примеры с -maxdepth 0опциями, но не смог найти ни одного подходящего примера.

Моя findверсия такова,

find --version
find (GNU findutils) 4.4.2

Может ли кто-нибудь подсказать, в каких случаях -maxdepth 0этот вариант будет полезен?

РЕДАКТИРОВАТЬ

Когда я выполняю команду ниже, я получаюфайл1попадание в список дважды. Это так и должно работать?

find . file1 -maxdepth 1 -name "file1"
./file1
file1

решение1

Предположим, что file1в текущем каталоге у нас есть. Тогда:

$ find . -maxdepth 0 -name "file1"
$ find . file1 -maxdepth 0 -name "file1"
file1

Теперь давайте посмотрим, чтодокументациясостояния:

-maxdepth 0 означает применять тесты и действия только к аргументам командной строки.

В моем первом примере выше был указан только каталог.указан в командной строке. Так как.не имеет имени file1, ничего не указано в выводе. В моем втором примере выше, оба.и  file1перечислены в командной строке, и, поскольку file1они соответствуют -name "file1", они были возвращены в выходных данных.

Другими словами, -maxdepth 0средства делаютнетпоиск каталогов или подкаталогов. Вместо этого ищите только соответствующий файл среди тех, которые явно указаны в командной строке.

В ваших примерах в командной строке были перечислены только каталоги и ни один из них не был назван file1. Поэтому и вывода нет.

В общем, в командной строке можно указать множество файлов и каталогов. Например, здесь мы попробуем findкоманду с девятью файлами и каталогами в командной строке:

$ ls
d1  file1  file10  file2  file3  file4  file5  file6  file7
$ find d1 file1 file10 file2 file3 file4 file5 file6 file7 -maxdepth 0 -name "file1"
file1

Перекрывающиеся пути

Учитывать:

$ find . file1 -maxdepth 0 -iname file1
file1
$ find . file1 file1 -maxdepth 0 -iname file1
file1
file1
$ find . file1 file1 -maxdepth 1 -iname file1
./file1
file1
file1

findбудет следовать каждому пути, указанному в командной строке, и искать совпадения, даже если пути ведут к одному и тому же файлу, как в . file, или даже если пути являются точными дубликатами, как в file1 file1.

решение2

Если вы хотите нерекурсивно найти файлы (не каталоги) внутри каталога, используйте:

find . -maxdepth 1 -type f -name "file1"
# ./file1

-maxdepth 0 не будет искать. Он попытается сопоставить только те имена файлов/каталогов, которые вы указали в качестве аргументов в find.

Например, в приведенном выше утверждении при использовании maxdepthзначения 0будет произведена попытка сопоставления file1с ., которое не соответствует.

Однако,передача *вместо .в сочетании с -maxdepth 0заставит bash заменить *его списком файлов в текущем каталоге, что вернет совпадение.

решение3

Использование:

John1024 привел хорошие примеры,какдля использования -maxdepth 0, поэтому я только добавляю информациюкогдачтобы использовать его:

Ну, в чем причина -maxdepth 0? Если вы знаете имя, вы можете просто дать команду

ls file-* 

Ну, возможно, это не то имя, которое вы ищете.

Пример:

touch file-{1..3}
echo "1" > file-1
touch -d @0 file-2

find * -maxdepth 0 -name "file-*" \( -size 1k -o -mtime +10000 \) -ls 
   669266     12 -rw-rw-r--   1 stefan   stefan          2 Mai  4 20:57 file-1
   669270      8 -rw-rw-r--   1 stefan   stefan          0 Jan  1  1970 file-2

Я создаю 3 файла с именем pattern file-*. Затем я добавляю немного контента в № 1, сбрасываю дату для № 2 и оставляю № 3 как есть.

Теперь я ищу файлы размером 1k (№ 1) или возрастом > примерно 30 лет среди, может быть, 1000 файлов. Например, только среди 3 файлов.

Но find * ищет каждый файл в текущем каталоге, отсюда и несколько чуждый жаргон man-страницы "начальная точка", а не просто каталоги. Я полагаю, что мощные возможности фильтра find привели к решению искать файлы, о которых вы знаете, где они находятся ($PWD), но вы не можете легко отфильтровать другие атрибуты с помощью стандартных инструментов оболочки.

Связанный контент