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команд файл1 возвращается.

На странице man findя вижу информацию ниже.

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

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

Моя findверсия

find --version
find (GNU findutils) 4.4.2

Может кто-нибудь, пожалуйста, предоставьте мне несколько советов, какие варианты -maxdepth 0будут полезны?

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

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

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". Будет *выведен список всех файлов в текущем каталоге в командной строке.
Джон1024

1
@Ramesh Ответ обновлен снова, я надеюсь, с лучшим объяснением и примерами.
Джон1024

Спасибо еще раз. Я обновил свой вопрос с более подробной информацией из вашего последнего обновления.
Рамеш

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