@Gilles: этот Q & A гораздо понятнее и менее локализован, чем обман - если один из них должен быть закрыт, то другой.
Златовласка
Ответы:
88
Проблема в том, что вы не указали свой -nameпараметр. Сделайте это вместо этого:
find .-name '*.java'
объяснение
Без кавычек оболочка интерпретируется *.javaкак шаблон глоба и расширяет его до любых имен файлов, соответствующих глобусу, прежде чем передать его find. Таким образом, если бы вы имели, скажем, foo.javaв текущем каталоге, findфактическая командная строка была бы:
find .-name foo.java
который, очевидно, будет перечислять файл только в текущем каталоге (если только у вас нет файлов с аналогичными именами ниже по дереву).
Заключение в кавычки предотвращает расширение глобуса и передает командную строку findкак есть.
Кстати, если глобус не соответствует (нет *.javaфайлов в текущем каталоге), вы получите одно из двух вариантов поведения в зависимости от того, как настроена ваша оболочка для обработки глобусов, которые не совпадают (это определяется nullglobпараметром в Bash). , например):
Если шар, который не совпадает, не расширяется оболочкой, find(случайно, обратите внимание) будет демонстрировать правильное поведение.
Если шарик, который не совпадает, раскрывается оболочкой в пустую строку, он findбудет жаловаться на отсутствие аргумента -name.
У меня была похожая ситуация, когда я окружал значение -name в кавычках, но все еще не получал все хиты поиска, на которые я надеялся. Я предположил, что это было из-за символических ссылок и, конечно же, так и было. Если вы хотите заставить поиск искать по символическим ссылкам, вы можете изменить команду следующим образом:
Ответы:
Проблема в том, что вы не указали свой
-name
параметр. Сделайте это вместо этого:объяснение
Без кавычек оболочка интерпретируется
*.java
как шаблон глоба и расширяет его до любых имен файлов, соответствующих глобусу, прежде чем передать егоfind
. Таким образом, если бы вы имели, скажем,foo.java
в текущем каталоге,find
фактическая командная строка была бы:который, очевидно, будет перечислять файл только в текущем каталоге (если только у вас нет файлов с аналогичными именами ниже по дереву).
Заключение в кавычки предотвращает расширение глобуса и передает командную строку
find
как есть.Кстати, если глобус не соответствует (нет
*.java
файлов в текущем каталоге), вы получите одно из двух вариантов поведения в зависимости от того, как настроена ваша оболочка для обработки глобусов, которые не совпадают (это определяетсяnullglob
параметром в Bash). , например):find
(случайно, обратите внимание) будет демонстрировать правильное поведение.find
будет жаловаться на отсутствие аргумента-name
.источник
У меня была похожая ситуация, когда я окружал значение -name в кавычках, но все еще не получал все хиты поиска, на которые я надеялся. Я предположил, что это было из-за символических ссылок и, конечно же, так и было. Если вы хотите заставить поиск искать по символическим ссылкам, вы можете изменить команду следующим образом:
источник
-follow
является более читаемым синонимом-L
, если вы поместите его перед другими параметрами.Избежать
*
источник