Я хотел бы определить местоположение файла с помощью командной строки. Я пытался:
find . -type f -name "postgis-2.0.0"
а также
locate postgis-2.0.0
но безрезультатно. Что такое команда для определения директории файла при условии его имени?
command-line
directory
find
Sam007
источник
источник
locate
команда хорошо, просто обновить locatedb первых, с помощью командыupdatedb
postgis-2.0.0
больше не быть . Обычно после установки через менеджеры пакетов исполняемые файлы находятся в одной из$PATH
папок, попробуйтеwhich postgis
посмотреть расположение. Если он ничего не возвращает, только тогда вы должны вручную искать местоположение файла.Ответы:
Попробуй
find ~/ -type f -name "postgis-2.0.0"
вместо.Использование
.
будет искать только текущий каталог.~/
будет искать весь ваш домашний каталог (вероятно, где вы загрузили его). Если вы используете вwget
качестве пользователя root, возможно, это может быть где-то еще, чтобы вы могли использовать/
для поиска по всей файловой системе.Удачи
источник
wget
как root, так что/
работало спасибоЯ бы попробовал:
. означает поиск только в текущем каталоге, лучше всего искать в корне, если вы действительно не знаете. Кроме того, введите -f означает поиск файлов, а не папок. Добавление
sudo
позволяет осуществлять поиск во всех папках / подпапках.Ваш синтаксис для
locate
правильный, но вам, возможно, придется запуститьпервый. По какой-то причине мне никогда не везет
locate
.locate
использует базу данных файлов и каталогов, созданныхupdatedb
. Поэтому, если вы скачали новый файл, есть большая вероятность, что выupdatedb
не обновили базу данных файлов и каталогов. Вы можете использоватьsudo updatedb
перед использованиемlocate
утилиты.updatedb
обычно запускается один раз в день в системах Linux.источник
find является одним из самых полезных инструментов Linux / Unix.
Пытаться
find . -type d | grep DIRNAME
источник
Другие ответы хороши, но я обнаружил, что пропущенные
Permission denied
утверждения дают мне более четкие ответы (пропускаетstderr
s из-за не запускаsudo
):где:
/
можно заменить каталогом, с которого вы хотите начать поискf
можно заменить на,d
если вы ищете каталог вместо файла-iname
можно заменить на,-name
если вы хотите, чтобы поиск был чувствительным к регистру*
s в срок поиска может быть опущена , если вы не хотите , чтобы символы в поискеАльтернатива:
Этот способ возвращает результаты, если поисковый термин соответствует где-либо в полном пути к файлу, например
/home/postgis-2.0.0/docs/Readme.txt
источник
-regex
и-iregex
переключатели для поискаRegular Expressions
, которые также находят упоминания пути. Предложение найти какой-либо элемент, который является файлом (-type f
),grep
является более дорогим ресурсом.Permission denied
происходит, когда пользователь не имеет доступа к файлам или папкам, использованиеsudo
до поиска позволит найти все файлы.-wholename
или-iwholename
вместо того, чтобы пускать по трубамgrep
.Пытаться
find . -name "*file_name*"
где вы можете изменить «.» (заглянуть в текущий каталог) на «/» (посмотреть всю систему) или «~ /» (посмотреть в домашний каталог).
где вы можете изменить «-name» на «-iname», если не хотите вводить регистр символов.
где вы можете изменить « имя_файла » (файл, который может начинаться и заканчиваться чем угодно) на точное имя файла.
источник
Это должно упростить поиск файла:
Это даст вам полный путь к файлу
Дерево отображает содержимое каталогов в древовидном формате.
-f
говорит дерево , чтобы дать полный путь к файлу. так как мы не имеем ни малейшего представления о его местонахождении или родительском расположении, хорошо бы поискать от корня файловой системы/
рекурсивно вниз. Затем мы отправляем вывод grep, чтобы выделить наше слово,postgis-2.0.0
источник
Хотя
find
команда является самым простым способом рекурсивного обхода дерева каталогов, существуют и другие способы, и в частности два языка сценариев, которые поставляются с Ubuntu по умолчанию, уже имеют возможность сделать это.удар
bash
имеет очень хорошийglobstar
параметр оболочки, который позволяет рекурсивный обход дерева каталогов. Все, что нам нужно сделать, это проверить, является ли элемент в./**/*
расширении файлом и содержит ли он нужный текст:Perl
В Perl есть модуль Find, который позволяет выполнять рекурсивный обход дерева каталогов и с помощью подпрограммы выполнять над ними определенные действия. С помощью небольшого сценария вы можете просмотреть дерево каталогов, поместить файлы, содержащие нужную строку, в массив, а затем распечатать его следующим образом:
И как это работает:
питон
Python - это еще один язык сценариев, который очень широко используется в мире Ubuntu. В частности, у него есть
os.walk()
модуль, который позволяет нам выполнить то же действие, что и выше - пройти по дереву каталогов и получить список файлов, которые содержат желаемую строку.Как однострочник это можно сделать так:
Полный скрипт будет выглядеть так:
источник
$ find . -type f | grep IMG_20171225_*
Дает
./03-05--2018/IMG_20171225_200513.jpg
DOT после того, как команда
find
установит начальную точку,следовательно - текущая папка,
"переданная по каналу" (= отфильтрованная) через фильтр имен
IMG_20171225_*
источник