Найти файл в каталоге из командной строки
В редакторах/идах, таких как eclipse и textmate, есть ярлыки для быстрого поиска определенного файла в каталоге проекта.
Есть ли аналогичный инструмент для полного завершения пути по именам файлов в каталоге (рекурсивно), в bash или в другой оболочке?
У меня есть проекты с большим количеством каталогов, и глубокие в этом (вздох, java).
Ударная вкладка в оболочке только циклически проходит через файлы в ближайшем каталоге, это недостаточно =/
Ответы
Ответ 1
find /root/directory/to/search -name 'filename.*'
# Directory is optional (defaults to cwd)
Поддерживается стандартное UNIX-подшивка. Подробнее см. man find
.
Если вы используете Vim, вы можете использовать:
:e **/filename.cpp
Или :tabn
или любая команда Vim, которая принимает имя файла.
Ответ 2
Если вы хотите что-то сделать со списком файлов, вы можете использовать find в сочетании с конструкцией bash $()
(лучше, чем обратные ссылки, поскольку это позволяло гнездиться).
например, скажем, что вы находитесь на верхнем уровне своего каталога проектов, и вам нужен список всех файлов C, начинающихся с "btree". Команда:
find . -type f -name 'btree*.c'
вернет список из них. Но это не помогает с ними что-то делать.
Итак, давайте предположим, что вы хотите искать все эти файлы для строки "ERROR" или редактировать их все. Вы можете выполнить одно из следующих действий:
grep ERROR $(find . -type f -name 'btree*.c')
vi $(find . -type f -name 'btree*.c')
чтобы сделать это.
Ответ 3
Когда я был в мире UNIX (используя tcsh (sigh...)), у меня были всевозможные "находки" псевдонимов/скриптов для поиска файлов. Я думаю, что синтаксис "find" по умолчанию является немного неуклюжим, поэтому у меня были псевдонимы/скрипты, которые связывали "find. -print" в grep, что позволяет использовать регулярные выражения для поиска:
# finds all .java files starting in current directory
find . -print | grep '\.java'
#finds all .java files whose name contains "Message"
find . -print | grep '.*Message.*\.java'
Конечно, приведенные выше примеры можно сделать с помощью простой старой находки, но если у вас есть более конкретный поиск, grep может помочь совсем немного. Это работает очень хорошо, если "find. -print" не слишком много каталогов для рекурсии... тогда он становится довольно медленным. (например, вы не захотите делать это, начиная с корня "/" )
Ответ 4
Я использую этот script для быстрого поиска файлов по каталогам в проекте. Я нашел, что он отлично работает и использует автозаполнение Vim, открывая и закрывая новый буфер для поиска. Он также прекрасно подходит для вас как можно больше, поэтому вы можете просто набирать символ или два и открывать файл в любом каталоге вашего проекта. Я начал использовать его специально из-за проекта Java, и это сэкономило мне много времени. Вы просто создаете кеш один раз, когда вы начинаете сеанс редактирования, набрав: FC (имена каталогов). Вы также можете просто использовать. для получения текущего каталога и всех подкаталогов. После этого вы просто набираете: FF (или FS, чтобы открыть новый раскол), и он откроет новый буфер, чтобы выбрать нужный файл. После того, как вы выберете файл, буфер temp закроется, и вы попадете в запрошенный файл и можете начать редактирование. Кроме того, здесь - это еще одна ссылка на переполнение стека, которая может помочь.
Ответ 5
http://content.hccfl.edu/pollock/Unix/FindCmd.htm
Команда linux/unix "find".
Ответ 6
Да, bash
имеет механизмы завершения имени файла. Я не использую их сам (слишком ленив, чтобы учиться, и я не считаю это необходимым достаточно часто, чтобы сделать его срочным), но основным механизмом является набирать первые несколько символов, а затем вкладку; это расширит имя, насколько это возможно (возможно, совсем не так), если имя недвусмысленно. Есть лодка команд в стиле Emacs, связанных с завершением на странице хорошего пользователя.
Ответ 7
locate <file_pattern>
*** find
, безусловно, будет работать и может ориентироваться на конкретные каталоги. Однако эта команда работает медленнее, чем команда locate
. На ОС Linux каждое утро создается база данных, которая содержит список всех каталогов и файлов, а команда locate
эффективно выполняет поиск в этой базе данных, поэтому, если вы хотите выполнить поиск файлов, которые не были созданы сегодня, это был бы самым быстрым способом выполнить такую задачу.