find -maxdepth 0 не повертає мені жодного результату


17

Я намагаюся зрозуміти, як використовувати find -maxdepth 0варіант.

У мене нижче структура каталогів.

--> 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команд file1 повертається.

З man man сторінки find, я бачу нижче інформацію.

-maxdepth 0 означає лише застосувати тести та дії до аргументів командного рядка.

Я шукав кілька прикладів з -maxdepth 0опцією і не зміг знайти належного прикладу.

Моя findверсія -

find --version
find (GNU findutils) 4.4.2

Чи може хтось, будь ласка, надати мені вказівки, на який -maxdepth 0варіант корисного випадку буде корисним?

EDIT

Коли я виконую команду нижче, я отримую файл1, який перераховується двічі. Чи призначено це працювати таким чином?

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

Відповіді:


24

Припустимо, що у нас є file1поточний каталог. Потім:

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

Тепер давайте розглянемо, що зазначено в документації:

-maxdepth 0 означає лише застосувати тести та дії до аргументів командного рядка.

У моєму першому прикладі вище, .у командному рядку вказаний лише каталог . Оскільки .не має назви file1, у висновку нічого не вказано. У моєму другому прикладі вище, обидва .і file1вказані в командному рядку і, оскільки file1відповідає -name "file1", було повернуто у висновку

Іншими словами, -maxdepth 0засоби не здійснюють пошук у каталогах чи підкаталогах. Натомість шукайте відповідний файл серед тих, які явно вказані в командному рядку.

У ваших прикладах у командному рядку були вказані лише каталоги, і жоден з них не був названий file1. Отже, жодного виходу.

Загалом, багато файлів і каталогів можуть бути названі в командному рядку. Наприклад, тут ми спробуємо findкоманду з 11 файлами та каталогами в командному рядку:

$ ls
d1  file1  file10  file2  file3  file4  file5  file6  file7  file8  file9
$ find d1 file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 -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.


Спасибі. Але як я можу передати деякі імена файлів у командному рядку?
Рамеш

Гарна думка. Дивіться мою оновлену відповідь. Ви можете поставити скільки завгодно до першого тесту. Наприклад: find * -maxdepth 0 -name "file1". У *списку буде показаний кожен файл у поточному каталозі командного рядка.
John1024

1
@Ramesh Answer знову оновлено, я сподіваюся, краще пояснення та приклади.
John1024

знову дякую. Я оновив своє запитання, щоб отримати докладнішу інформацію про ваше останнє оновлення.
Рамеш

@Ramesh Я не можу знайти це документально, але я бачу таку ж поведінку, як і ви: findпереглядає кожен шлях у командному рядку та повідомляє про відповідність кожному, навіть якщо вони є дублікатами.
John1024
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.