Используйте & ldquo; найдите & rdquo; в каком-то конкретном каталоге?

Я думаю, что проблема возникает из-за того, что оболочка (в терминале), в которой вы запускаете поставщик, не является оболочкой входа. Сделайте его оболочкой входа в систему следующим образом:

bash --login
40
задан 3 April 2011 в 17:53

34 ответа

UPDATE: примечание об использовании опции regex locate и расширения имени файла оболочки в отношении аргументов locate ...

UPDATE Когда вы вводите locate /bin/b* (обратите внимание, что есть нет кавычек), происходит несколько вещей.

Во-первых, shell-имя-расширение расширяет расширение оболочки charecter * (это потому, что * незащищен, т. е. нет «двойных кавычек»). Результатом этого расширения является список имен файлов. который, возможно, очень длинный ... Этот список передается в locate как много отдельных команд командной строки. locate затем проверяет каждый из этих аргументов на каждый из файлов в своей базе данных и выводит совпадения.

Обратите внимание, что «locate» не имеет понятия текущего рабочего каталога. Это соответствует только вашим аргументам против полных имен файлов в его базе данных. Это означает, что он будет соответствовать как /bin/bash, так и /home/user/bin/brackets. У вас есть определенная степень контроля таким образом, но регулярное выражение locate поиск предлагает больше; как и некоторые другие варианты локации.

и Когда вы вводите locate -r "/bin/b.*", происходят разные вещи, чем с простыми args .. ( полностью квалифицированные просто список простых аргументов)

Во-первых, расширение файла shell расширяет расширение charecter оболочки оболочки * (это потому, что * не защищено, т. е. нет «двойных кавычек», ) Кавычки защищают * от расширения файла оболочки. Это означает, что * и точка. теперь shell имя_файла-расширение . В результате это расширение представляет собой список имен файлов. который, возможно, очень длинный ... Этот список передается в locate как много отдельных команд командной строки.

Сводка: «расширение оболочки оболочки» совершенно отличается от «regex»

Теперь вернемся к исходному сообщению:

locate обычно перечисляет всю базу данных в stdout, поэтому, чтобы ограничить ее конкретным каталогом, вам необходимо ее отфильтровать ... Вы можете сделать это с помощью опций локализации.

Вы можете использовать возможность регулярного выражения locate, а не просто shell-globbing ... (locate /dir/myfile* - это подшивка оболочки) ...

Из информации locate: -r, --regex

«... (regex) совпадения выполняются против всего имени пути, и поэтому по умолчанию путь будет сопоставлен, если какая-либо его часть совпадает с указанным регулярным выражением. используйте ^ или $ для привязки соответствия в начале или конце пути. "

примечание: -i = игнорировать кейс. , , , , -r = регулярное выражение. , , , , ~ / будет расширяться оболочкой в ​​/ home / user (когда ~ / не находится в кавычках). , , , , '\' (baskslash + space, no quotes) - буквальное пространство (чтобы избежать расширения оболочки). Вы можете поместить строку в кавычки, но не забудьте оставить параметр regex вне кавычек: ~/my\ regex или -/"my regex"

например. locate -ir ~/".*"la\ bella\ vita - это то же самое, что и locate -ir ~/".*la bella vita", и будет искать весь домашний каталог для «La Bella Vita», происходящий где угодно.

Вы также можете ограничить поиск только файлом '\' , но с помощью -b или --basename .. в этом случае регулярное начало строки [ f20] применяется только к базовому имени ...

Я чаще всего использую locate -bir

PS .. Locate настолько быстр, что я никогда не использовал find ... и я не использовал nautilus search (слишком медленно)

С помощью «locate», если вы ищете что-то новое, просто запустите sudo updatedb, чтобы обновить базу данных locate ... ( но если вы его недавно добавили, вы, вероятно, знаете, где это:) ....

19
ответ дан 25 May 2018 в 22:17

UPDATE: примечание об использовании опции regex locate и расширения имени файла оболочки в отношении аргументов locate ...

UPDATE Когда вы вводите locate /bin/b* (обратите внимание, что есть нет кавычек), происходит несколько вещей.

Во-первых, shell-имя-расширение расширяет расширение оболочки charecter * (это потому, что * незащищен, т. е. нет «двойных кавычек»). Результатом этого расширения является список имен файлов. который, возможно, очень длинный ... Этот список передается в locate как много отдельных команд командной строки. locate затем проверяет каждый из этих аргументов на каждый из файлов в своей базе данных и выводит совпадения.

Обратите внимание, что «locate» не имеет понятия текущего рабочего каталога. Это соответствует только вашим аргументам против полных имен файлов в его базе данных. [D7] Это означает, что он будет соответствовать как /bin/bash, так и /home/user/bin/brackets. У вас есть определенная степень контроля таким образом, но регулярное выражение locate поиск предлагает больше; как и некоторые другие варианты локации.

и Когда вы вводите locate -r "/bin/b.*", происходят разные вещи, чем с простыми args .. ( полностью квалифицированные просто список простых аргументов)

Во-первых, расширение файла shell расширяет расширение charecter оболочки оболочки * (это потому, что * не защищено, т. е. нет «двойных кавычек», ) Кавычки защищают * от расширения файла оболочки. Это означает, что * и точка. теперь shell имя_файла-расширение . В результате это расширение представляет собой список имен файлов. который, возможно, очень длинный ... Этот список передается в locate как много отдельных команд командной строки.

Сводка: «расширение оболочки оболочки» совершенно отличается от «regex»

Теперь вернемся к исходному сообщению:

locate обычно перечисляет всю базу данных в stdout, поэтому, чтобы ограничить ее конкретным каталогом, вам необходимо ее отфильтровать ... Вы можете сделать это с помощью опций локализации.

Вы можете использовать возможность регулярного выражения locate, а не просто shell-globbing ... (locate /dir/myfile* - это подшивка оболочки) ...

Из информации locate: -r, --regex

«... (regex) совпадения выполняются против всего имени пути, и поэтому по умолчанию путь будет сопоставлен, если какая-либо его часть совпадает с указанным регулярным выражением. используйте ^ или $ для привязки соответствия в начале или конце пути. "

примечание: -i = игнорировать кейс. , , , , -r = регулярное выражение. , , , , ~ / будет расширяться оболочкой в ​​/ home / user (когда ~ / не находится в кавычках). , , , , '\' (baskslash + space, no quotes) - буквальное пространство (чтобы избежать расширения оболочки). Вы можете поместить строку в кавычки, но не забудьте оставить параметр regex вне кавычек: ~/my\ regex или -/"my regex"

например. locate -ir ~/".*"la\ bella\ vita - это то же самое, что и locate -ir ~/".*la bella vita", и будет искать весь домашний каталог для «La Bella Vita», происходящий где угодно.

Вы также можете ограничить поиск только файлом '\' , но с помощью -b или --basename .. в этом случае регулярное начало строки ^ применяется только к базовому имени ...

Я чаще всего использую locate -bir

PS .. Locate настолько быстр, что я никогда не использовал find ... и я не использовал nautilus search (слишком медленно)

С помощью «locate», если вы ищете что-то новое, просто запустите sudo updatedb, чтобы обновить базу данных locate ... ( но если вы его недавно добавили, вы, вероятно, знаете, где это:) ....

19
ответ дан 25 July 2018 в 22:16

UPDATE: примечание об использовании опции regex locate и расширения имени файла оболочки в отношении аргументов locate ...

UPDATE Когда вы вводите locate /bin/b* (обратите внимание, что есть нет кавычек), происходит несколько вещей.

Во-первых, shell-имя-расширение расширяет расширение оболочки charecter * (это потому, что * незащищен, т. е. нет «двойных кавычек»). Результатом этого расширения является список имен файлов. который, возможно, очень длинный ... Этот список передается в locate как много отдельных команд командной строки. locate затем проверяет каждый из этих аргументов на каждый из файлов в своей базе данных и выводит совпадения.

Обратите внимание, что «locate» не имеет понятия текущего рабочего каталога. Это соответствует только вашим аргументам против полных имен файлов в его базе данных. [D7] Это означает, что он будет соответствовать как /bin/bash, так и /home/user/bin/brackets. У вас есть определенная степень контроля таким образом, но регулярное выражение locate поиск предлагает больше; как и некоторые другие варианты локации.

и Когда вы вводите locate -r "/bin/b.*", происходят разные вещи, чем с простыми args .. ( полностью квалифицированные просто список простых аргументов)

Во-первых, расширение файла shell расширяет расширение charecter оболочки оболочки * (это потому, что * не защищено, т. е. нет «двойных кавычек», ) Кавычки защищают * от расширения файла оболочки. Это означает, что * и точка. теперь shell имя_файла-расширение . В результате это расширение представляет собой список имен файлов. который, возможно, очень длинный ... Этот список передается в locate как много отдельных команд командной строки.

Сводка: «расширение оболочки оболочки» совершенно отличается от «regex»

Теперь вернемся к исходному сообщению:

locate обычно перечисляет всю базу данных в stdout, поэтому, чтобы ограничить ее конкретным каталогом, вам необходимо ее отфильтровать ... Вы можете сделать это с помощью опций локализации.

Вы можете использовать возможность регулярного выражения locate, а не просто shell-globbing ... (locate /dir/myfile* - это подшивка оболочки) ...

Из информации locate: -r, --regex

«... (regex) совпадения выполняются против всего имени пути, и поэтому по умолчанию путь будет сопоставлен, если какая-либо его часть совпадает с указанным регулярным выражением. используйте ^ или $ для привязки соответствия в начале или конце пути. "

примечание: -i = игнорировать кейс. , , , , -r = регулярное выражение. , , , , ~ / будет расширяться оболочкой в ​​/ home / user (когда ~ / не находится в кавычках). , , , , '\' (baskslash + space, no quotes) - буквальное пространство (чтобы избежать расширения оболочки). Вы можете поместить строку в кавычки, но не забудьте оставить параметр regex вне кавычек: ~/my\ regex или -/"my regex"

например. locate -ir ~/".*"la\ bella\ vita - это то же самое, что и locate -ir ~/".*la bella vita", и будет искать весь домашний каталог для «La Bella Vita», происходящий где угодно.

Вы также можете ограничить поиск только файлом '\' , но с помощью -b или --basename .. в этом случае регулярное начало строки ^ применяется только к базовому имени ...

Я чаще всего использую locate -bir

PS .. Locate настолько быстр, что я никогда не использовал find ... и я не использовал nautilus search (слишком медленно)

С помощью «locate», если вы ищете что-то новое, просто запустите sudo updatedb, чтобы обновить базу данных locate ... ( но если вы его недавно добавили, вы, вероятно, знаете, где это:) ....

19
ответ дан 26 July 2018 в 20:12

UPDATE: примечание об использовании опции regex locate и расширения имени файла оболочки в отношении аргументов locate ...

UPDATE Когда вы вводите locate /bin/b* (обратите внимание, что есть нет кавычек), происходит несколько вещей.

Во-первых, shell-имя-расширение расширяет расширение оболочки charecter * (это потому, что * незащищен, т. е. нет «двойных кавычек»). Результатом этого расширения является список имен файлов. который, возможно, очень длинный ... Этот список передается в locate как много отдельных команд командной строки. locate затем проверяет каждый из этих аргументов на каждый из файлов в своей базе данных и выводит совпадения.

Обратите внимание, что «locate» не имеет понятия текущего рабочего каталога. Это соответствует только вашим аргументам против полных имен файлов в его базе данных. [D7] Это означает, что он будет соответствовать как /bin/bash, так и /home/user/bin/brackets. У вас есть определенная степень контроля таким образом, но регулярное выражение locate поиск предлагает больше; как и некоторые другие варианты локации.

и Когда вы вводите locate -r "/bin/b.*", происходят разные вещи, чем с простыми args .. ( полностью квалифицированные просто список простых аргументов)

Во-первых, расширение файла shell расширяет расширение charecter оболочки оболочки * (это потому, что * не защищено, т. е. нет «двойных кавычек», ) Кавычки защищают * от расширения файла оболочки. Это означает, что * и точка. теперь shell имя_файла-расширение . В результате это расширение представляет собой список имен файлов. который, возможно, очень длинный ... Этот список передается в locate как много отдельных команд командной строки.

Сводка: «расширение оболочки оболочки» совершенно отличается от «regex»

Теперь вернемся к исходному сообщению:

locate обычно перечисляет всю базу данных в stdout, поэтому, чтобы ограничить ее конкретным каталогом, вам необходимо ее отфильтровать ... Вы можете сделать это с помощью опций локализации.

Вы можете использовать возможность регулярного выражения locate, а не просто shell-globbing ... (locate /dir/myfile* - это подшивка оболочки) ...

Из информации locate: -r, --regex

«... (regex) совпадения выполняются против всего имени пути, и поэтому по умолчанию путь будет сопоставлен, если какая-либо его часть совпадает с указанным регулярным выражением. используйте ^ или $ для привязки соответствия в начале или конце пути. "

примечание: -i = игнорировать кейс. , , , , -r = регулярное выражение. , , , , ~ / будет расширяться оболочкой в ​​/ home / user (когда ~ / не находится в кавычках). , , , , '\' (baskslash + space, no quotes) - буквальное пространство (чтобы избежать расширения оболочки). Вы можете поместить строку в кавычки, но не забудьте оставить параметр regex вне кавычек: ~/my\ regex или -/"my regex"

например. locate -ir ~/".*"la\ bella\ vita - это то же самое, что и locate -ir ~/".*la bella vita", и будет искать весь домашний каталог для «La Bella Vita», происходящий где угодно.

Вы также можете ограничить поиск только файлом '\' , но с помощью -b или --basename .. в этом случае регулярное начало строки ^ применяется только к базовому имени ...

Я чаще всего использую locate -bir

PS .. Locate настолько быстр, что я никогда не использовал find ... и я не использовал nautilus search (слишком медленно)

С помощью «locate», если вы ищете что-то новое, просто запустите sudo updatedb, чтобы обновить базу данных locate ... ( но если вы его недавно добавили, вы, вероятно, знаете, где это:) ....

19
ответ дан 31 July 2018 в 10:30

UPDATE: примечание об использовании опции regex locate и расширения имени файла оболочки в отношении аргументов locate ...

UPDATE Когда вы вводите locate /bin/b* (обратите внимание, что есть нет кавычек), происходит несколько вещей.

Во-первых, shell-имя-расширение расширяет расширение оболочки charecter * (это потому, что * незащищен, т. е. нет «двойных кавычек»). Результатом этого расширения является список имен файлов. который, возможно, очень длинный ... Этот список передается в locate как много отдельных команд командной строки. locate затем проверяет каждый из этих аргументов на каждый из файлов в своей базе данных и выводит совпадения.

Обратите внимание, что «locate» не имеет понятия текущего рабочего каталога. Это соответствует только вашим аргументам против полных имен файлов в его базе данных. [D7] Это означает, что он будет соответствовать как /bin/bash, так и /home/user/bin/brackets. У вас есть определенная степень контроля таким образом, но регулярное выражение locate поиск предлагает больше; как и некоторые другие варианты локации.

и Когда вы вводите locate -r "/bin/b.*", происходят разные вещи, чем с простыми args .. ( полностью квалифицированные просто список простых аргументов)

Во-первых, расширение файла shell расширяет расширение charecter оболочки оболочки * (это потому, что * не защищено, т. е. нет «двойных кавычек», ) Кавычки защищают * от расширения файла оболочки. Это означает, что * и точка. теперь shell имя_файла-расширение . В результате это расширение представляет собой список имен файлов. который, возможно, очень длинный ... Этот список передается в locate как много отдельных команд командной строки.

Сводка: «расширение оболочки оболочки» совершенно отличается от «regex»

Теперь вернемся к исходному сообщению:

locate обычно перечисляет всю базу данных в stdout, поэтому, чтобы ограничить ее конкретным каталогом, вам необходимо ее отфильтровать ... Вы можете сделать это с помощью опций локализации.

Вы можете использовать возможность регулярного выражения locate, а не просто shell-globbing ... (locate /dir/myfile* - это подшивка оболочки) ...

Из информации locate: -r, --regex

«... (regex) совпадения выполняются против всего имени пути, и поэтому по умолчанию путь будет сопоставлен, если какая-либо его часть совпадает с указанным регулярным выражением. используйте ^ или $ для привязки соответствия в начале или конце пути. "

примечание: -i = игнорировать кейс. , , , , -r = регулярное выражение. , , , , ~ / будет расширяться оболочкой в ​​/ home / user (когда ~ / не находится в кавычках). , , , , '\' (baskslash + space, no quotes) - буквальное пространство (чтобы избежать расширения оболочки). Вы можете поместить строку в кавычки, но не забудьте оставить параметр regex вне кавычек: ~/my\ regex или -/"my regex"

например. locate -ir ~/".*"la\ bella\ vita - это то же самое, что и locate -ir ~/".*la bella vita", и будет искать весь домашний каталог для «La Bella Vita», происходящий где угодно.

Вы также можете ограничить поиск только файлом '\' , но с помощью -b или --basename .. в этом случае регулярное начало строки ^ применяется только к базовому имени ...

Я чаще всего использую locate -bir

PS .. Locate настолько быстр, что я никогда не использовал find ... и я не использовал nautilus search (слишком медленно)

С помощью «locate», если вы ищете что-то новое, просто запустите sudo updatedb, чтобы обновить базу данных locate ... ( но если вы его недавно добавили, вы, вероятно, знаете, где это:) ....

19
ответ дан 31 July 2018 в 11:31

UPDATE: примечание об использовании опции regex locate и расширения имени файла оболочки в отношении аргументов locate ...

UPDATE Когда вы вводите locate /bin/b* (обратите внимание, что есть нет кавычек), происходит несколько вещей.

Во-первых, shell-имя-расширение расширяет расширение оболочки charecter * (это потому, что * незащищен, т. е. нет «двойных кавычек»). Результатом этого расширения является список имен файлов. который, возможно, очень длинный ... Этот список передается в locate как много отдельных команд командной строки. locate затем проверяет каждый из этих аргументов на каждый из файлов в своей базе данных и выводит совпадения.

Обратите внимание, что «locate» не имеет понятия текущего рабочего каталога. Это соответствует только вашим аргументам против полных имен файлов в его базе данных. [D7] Это означает, что он будет соответствовать как /bin/bash, так и /home/user/bin/brackets. У вас есть определенная степень контроля таким образом, но регулярное выражение locate поиск предлагает больше; как и некоторые другие варианты локации.

и Когда вы вводите locate -r "/bin/b.*", происходят разные вещи, чем с простыми args .. ( полностью квалифицированные просто список простых аргументов)

Во-первых, расширение файла shell расширяет расширение charecter оболочки оболочки * (это потому, что * не защищено, т. е. нет «двойных кавычек», ) Кавычки защищают * от расширения файла оболочки. Это означает, что * и точка. теперь shell имя_файла-расширение . В результате это расширение представляет собой список имен файлов. который, возможно, очень длинный ... Этот список передается в locate как много отдельных команд командной строки.

Сводка: «расширение оболочки оболочки» совершенно отличается от «regex»

Теперь вернемся к исходному сообщению:

locate обычно перечисляет всю базу данных в stdout, поэтому, чтобы ограничить ее конкретным каталогом, вам необходимо ее отфильтровать ... Вы можете сделать это с помощью опций локализации.

Вы можете использовать возможность регулярного выражения locate, а не просто shell-globbing ... (locate /dir/myfile* - это подшивка оболочки) ...

Из информации locate: -r, --regex

«... (regex) совпадения выполняются против всего имени пути, и поэтому по умолчанию путь будет сопоставлен, если какая-либо его часть совпадает с указанным регулярным выражением. используйте ^ или $ для привязки соответствия в начале или конце пути. "

примечание: -i = игнорировать кейс. , , , , -r = регулярное выражение. , , , , ~ / будет расширяться оболочкой в ​​/ home / user (когда ~ / не находится в кавычках). , , , , '\' (baskslash + space, no quotes) - буквальное пространство (чтобы избежать расширения оболочки). Вы можете поместить строку в кавычки, но не забудьте оставить параметр regex вне кавычек: ~/my\ regex или -/"my regex"

например. locate -ir ~/".*"la\ bella\ vita - это то же самое, что и locate -ir ~/".*la bella vita", и будет искать весь домашний каталог для «La Bella Vita», происходящий где угодно.

Вы также можете ограничить поиск только файлом '\' , но с помощью -b или --basename .. в этом случае регулярное начало строки ^ применяется только к базовому имени ...

Я чаще всего использую locate -bir

PS .. Locate настолько быстр, что я никогда не использовал find ... и я не использовал nautilus search (слишком медленно)

С помощью «locate», если вы ищете что-то новое, просто запустите sudo updatedb, чтобы обновить базу данных locate ... ( но если вы его недавно добавили, вы, вероятно, знаете, где это:) ....

19
ответ дан 2 August 2018 в 03:44

UPDATE: примечание об использовании опции regex locate и расширения имени файла оболочки в отношении аргументов locate ...

UPDATE Когда вы вводите locate /bin/b* (обратите внимание, что есть нет кавычек), происходит несколько вещей.

Во-первых, shell-имя-расширение расширяет расширение оболочки charecter * (это потому, что * незащищен, т. е. нет «двойных кавычек»). Результатом этого расширения является список имен файлов. который, возможно, очень длинный ... Этот список передается в locate как много отдельных команд командной строки. locate затем проверяет каждый из этих аргументов на каждый из файлов в своей базе данных и выводит совпадения.

Обратите внимание, что «locate» не имеет понятия текущего рабочего каталога. Это соответствует только вашим аргументам против полных имен файлов в его базе данных. [D7] Это означает, что он будет соответствовать как /bin/bash, так и /home/user/bin/brackets. У вас есть определенная степень контроля таким образом, но регулярное выражение locate поиск предлагает больше; как и некоторые другие варианты локации.

и Когда вы вводите locate -r "/bin/b.*", происходят разные вещи, чем с простыми args .. ( полностью квалифицированные просто список простых аргументов)

Во-первых, расширение файла shell расширяет расширение charecter оболочки оболочки * (это потому, что * не защищено, т. е. нет «двойных кавычек», ) Кавычки защищают * от расширения файла оболочки. Это означает, что * и точка. теперь shell имя_файла-расширение . В результате это расширение представляет собой список имен файлов. который, возможно, очень длинный ... Этот список передается в locate как много отдельных команд командной строки.

Сводка: «расширение оболочки оболочки» совершенно отличается от «regex»

Теперь вернемся к исходному сообщению:

locate обычно перечисляет всю базу данных в stdout, поэтому, чтобы ограничить ее конкретным каталогом, вам необходимо ее отфильтровать ... Вы можете сделать это с помощью опций локализации.

Вы можете использовать возможность регулярного выражения locate, а не просто shell-globbing ... (locate /dir/myfile* - это подшивка оболочки) ...

Из информации locate: -r, --regex

«... (regex) совпадения выполняются против всего имени пути, и поэтому по умолчанию путь будет сопоставлен, если какая-либо его часть совпадает с указанным регулярным выражением. используйте ^ или $ для привязки соответствия в начале или конце пути. "

примечание: -i = игнорировать кейс. , , , , -r = регулярное выражение. , , , , ~ / будет расширяться оболочкой в ​​/ home / user (когда ~ / не находится в кавычках). , , , , '\' (baskslash + space, no quotes) - буквальное пространство (чтобы избежать расширения оболочки). Вы можете поместить строку в кавычки, но не забудьте оставить параметр regex вне кавычек: ~/my\ regex или -/"my regex"

например. locate -ir ~/".*"la\ bella\ vita - это то же самое, что и locate -ir ~/".*la bella vita", и будет искать весь домашний каталог для «La Bella Vita», происходящий где угодно.

Вы также можете ограничить поиск только файлом '\' , но с помощью -b или --basename .. в этом случае регулярное начало строки ^ применяется только к базовому имени ...

Я чаще всего использую locate -bir

PS .. Locate настолько быстр, что я никогда не использовал find ... и я не использовал nautilus search (слишком медленно)

С помощью «locate», если вы ищете что-то новое, просто запустите sudo updatedb, чтобы обновить базу данных locate ... ( но если вы его недавно добавили, вы, вероятно, знаете, где это:) ....

19
ответ дан 4 August 2018 в 19:48

UPDATE: примечание об использовании опции регулярного выражения locate vs расширение имени файла оболочки в отношении аргументов locate ...

РАСШИРЕНИЕ SHELL FILENAME Когда вы набираете locate / bin / b * (обратите внимание, что нет кавычек), происходит несколько вещей.

  1. Во-первых, shell имя_файла-расширения будет расширять специальный [h26] shell pattern charecter * (Это потому, что * не защищен, т.е. не являются «двойными кавычками»)
  2. Это результирующее расширение представляет собой список имен файлов. который, возможно, очень длинный ... Этот список передается в локализовать столько же аргументов командной строки.
  3. найдите , затем проверяет каждый из этих аргументов на каждый из файлов в своей базе данных и выдает совпадения.

Обратите внимание, что «locate» не имеет понятия текущего рабочего каталога. Он только соответствует вашим аргументам против полностью квалифицированных имен файлов в своей базе данных. Это означает, что он будет соответствовать как / bin / bash , так и / home / user / bin / brackets . У вас определенная степень контроля таким образом, но поиск регулярного выражения предлагает больше; как и некоторые другие варианты локации.

ВАРИАНТ REGEX LOCATE Когда вы набираете locate -r "/bin/b.*", происходят разные вещи, чем с простыми args .. ( shell-extended-args - всего лишь список простых аргументов)

  1. Опция -r сообщает найти для обработки вашего аргумента как шаблона регулярного выражения ,
  2. Кавычки защищают * от расширения файла оболочки. Это означает, что * и точка. теперь специальные символы регулярного выражения
  3. Будучи регулярным выражением, вы можете очень легко сказать «locate», чтобы он соответствовал записи в базе данных различными способами: eg1. locate -r "^ / bin / b. *" создает имена файлов, начинающиеся с / bin / b ... eg2. locate -r ~ / "bin / b. *" создает имена файлов, начинающиеся с / home / user / bin / b .. Обратите внимание, что ~ / не защищено «кавычками» и поэтому подлежит shell tilde-expansion , который преобразует ~ / в / home / user /

Резюме: «расширение оболочки оболочки» совершенно отличается от «regex» [ ! d47]

Вернемся к исходному сообщению:


locate обычно перечисляет всю базу данных в stdout, поэтому для ограничения ее на конкретный каталог, который вам нужен отфильтруйте его ... Вы можете сделать это через опции локации.

Вы можете использовать возможность регулярного выражения locate, а не просто shell-globbing ... ( locate / dir / myfile * - это оболочка) ...

Из info locate : -r , - regex

  • "... (regex) совпадения выполняются против всего имени пути, и поэтому по умолчанию путь будет сопоставлен, если какая-либо его часть совпадает с указанным регулярным выражением. Регулярное выражение может использовать ^ или $ для привязки соответствия в начале или конце пути. "

примечание: -i = игнорировать регистр. , , , , -r = регулярное выражение. , , , , ~ / будет расширяться оболочкой в ​​/ home / user (когда ~ / не находится в кавычках). , , , , '\' (baskslash + space, no quotes) - буквальное пространство (чтобы избежать расширения оболочки). Вы можете поместить строку в кавычки, но обязательно оставите ~ / вне кавычек: ~ / my \regex или - / "мое регулярное выражение"

[D53], например. locate -ir ~ /".* "la \ bella \ vita - это то же самое, что найти -ir ~ /".* la bella vita" и будет искать ваш дом каталог для «La Bella Vita», встречающийся где угодно.

Вы также можете ограничить поиск только именем файла, но с помощью -b или - basename .. в этом случае запуск регулярного выражения, строка ^ применяется только к базовому имени ...

Я чаще всего использую locate -bir

PS .. Найти так быстро, что я никогда не использовал find ... и не использовал поиск nautilus (слишком медленно)

С помощью 'locate ', если вы ищете что-то новое, просто запустите sudo updatedb , чтобы обновить базу данных локации ... (но если вы ее недавно добавили, вы, вероятно, знаете, где это :). ...

19
ответ дан 6 August 2018 в 03:51

UPDATE: примечание об использовании опции регулярного выражения locate vs расширение имени файла оболочки в отношении аргументов locate ...

РАСШИРЕНИЕ SHELL FILENAME Когда вы набираете locate / bin / b * (обратите внимание, что нет кавычек), происходит несколько вещей.

  1. Во-первых, shell имя_файла-расширения будет расширять специальный [h26] shell pattern charecter * (Это потому, что * не защищен, т.е. не являются «двойными кавычками»)
  2. Это результирующее расширение представляет собой список имен файлов. который, возможно, очень длинный ... Этот список передается в локализовать столько же аргументов командной строки.
  3. найдите , затем проверяет каждый из этих аргументов на каждый из файлов в своей базе данных и выдает совпадения.

Обратите внимание, что «locate» не имеет понятия текущего рабочего каталога. Он только соответствует вашим аргументам против полностью квалифицированных имен файлов в своей базе данных. Это означает, что он будет соответствовать как / bin / bash , так и / home / user / bin / brackets . У вас определенная степень контроля таким образом, но поиск регулярного выражения предлагает больше; как и некоторые другие варианты локации.

ВАРИАНТ REGEX LOCATE Когда вы набираете locate -r "/bin/b.*", происходят разные вещи, чем с простыми args .. ( shell-extended-args - всего лишь список простых аргументов)

  1. Опция -r сообщает найти для обработки вашего аргумента как шаблона регулярного выражения ,
  2. Кавычки защищают * от расширения файла оболочки. Это означает, что * и точка. теперь специальные символы регулярного выражения
  3. Будучи регулярным выражением, вы можете очень легко сказать «locate», чтобы он соответствовал записи в базе данных различными способами: eg1. locate -r "^ / bin / b. *" создает имена файлов, начинающиеся с / bin / b ... eg2. locate -r ~ / "bin / b. *" создает имена файлов, начинающиеся с / home / user / bin / b .. Обратите внимание, что ~ / не защищено «кавычками» и поэтому подлежит shell tilde-expansion , который преобразует ~ / в / home / user /

Резюме: «расширение оболочки оболочки» совершенно отличается от «regex» [ ! d47]

Вернемся к исходному сообщению:


locate обычно перечисляет всю базу данных в stdout, поэтому для ограничения ее на конкретный каталог, который вам нужен отфильтруйте его ... Вы можете сделать это через опции локации.

Вы можете использовать возможность регулярного выражения locate, а не просто shell-globbing ... ( locate / dir / myfile * - это оболочка) ...

Из info locate : -r , - regex

  • "... (regex) совпадения выполняются против всего имени пути, и поэтому по умолчанию путь будет сопоставлен, если какая-либо его часть совпадает с указанным регулярным выражением. Регулярное выражение может использовать ^ или $ для привязки соответствия в начале или конце пути. "

примечание: -i = игнорировать регистр. , , , , -r = регулярное выражение. , , , , ~ / будет расширяться оболочкой в ​​/ home / user (когда ~ / не находится в кавычках). , , , , '\' (baskslash + space, no quotes) - буквальное пространство (чтобы избежать расширения оболочки). Вы можете поместить строку в кавычки, но обязательно оставите ~ / вне кавычек: ~ / my \regex или - / "мое регулярное выражение"

[D53], например. locate -ir ~ /".* "la \ bella \ vita - это то же самое, что найти -ir ~ /".* la bella vita" и будет искать ваш дом каталог для «La Bella Vita», встречающийся где угодно.

Вы также можете ограничить поиск только именем файла, но с помощью -b или - basename .. в этом случае запуск регулярного выражения, строка ^ применяется только к базовому имени ...

Я чаще всего использую locate -bir

PS .. Найти так быстро, что я никогда не использовал find ... и не использовал поиск nautilus (слишком медленно)

С помощью 'locate ', если вы ищете что-то новое, просто запустите sudo updatedb , чтобы обновить базу данных локации ... (но если вы ее недавно добавили, вы, вероятно, знаете, где это :). ...

19
ответ дан 7 August 2018 в 21:48

UPDATE: примечание об использовании опции регулярного выражения locate vs расширение имени файла оболочки в отношении аргументов locate ...

РАСШИРЕНИЕ SHELL FILENAME Когда вы набираете locate / bin / b * (обратите внимание, что нет кавычек), происходит несколько вещей.

  1. Во-первых, shell имя_файла-расширения будет расширять специальный [h26] shell pattern charecter * (Это потому, что * не защищен, т.е. не являются «двойными кавычками»)
  2. Это результирующее расширение представляет собой список имен файлов. который, возможно, очень длинный ... Этот список передается в локализовать столько же аргументов командной строки.
  3. найдите , затем проверяет каждый из этих аргументов на каждый из файлов в своей базе данных и выдает совпадения.

Обратите внимание, что «locate» не имеет понятия текущего рабочего каталога. Он только соответствует вашим аргументам против полностью квалифицированных имен файлов в своей базе данных. Это означает, что он будет соответствовать как / bin / bash , так и / home / user / bin / brackets . У вас определенная степень контроля таким образом, но поиск регулярного выражения предлагает больше; как и некоторые другие варианты локации.

ВАРИАНТ REGEX LOCATE Когда вы набираете locate -r "/bin/b.*", происходят разные вещи, чем с простыми args .. ( shell-extended-args - всего лишь список простых аргументов)

  1. Опция -r сообщает найти для обработки вашего аргумента как шаблона регулярного выражения ,
  2. Кавычки защищают * от расширения файла оболочки. Это означает, что * и точка. теперь специальные символы регулярного выражения
  3. Будучи регулярным выражением, вы можете очень легко сказать «locate», чтобы он соответствовал записи в базе данных различными способами: eg1. locate -r "^ / bin / b. *" создает имена файлов, начинающиеся с / bin / b ... eg2. locate -r ~ / "bin / b. *" создает имена файлов, начинающиеся с / home / user / bin / b .. Обратите внимание, что ~ / не защищено «кавычками» и поэтому подлежит shell tilde-expansion , который преобразует ~ / в / home / user /

Резюме: «расширение оболочки оболочки» совершенно отличается от «regex» [ ! d47]

Вернемся к исходному сообщению:


locate обычно перечисляет всю базу данных в stdout, поэтому для ограничения ее на конкретный каталог, который вам нужен отфильтруйте его ... Вы можете сделать это через опции локации.

Вы можете использовать возможность регулярного выражения locate, а не просто shell-globbing ... ( locate / dir / myfile * - это оболочка) ...

Из info locate : -r , - regex

  • "... (regex) совпадения выполняются против всего имени пути, и поэтому по умолчанию путь будет сопоставлен, если какая-либо его часть совпадает с указанным регулярным выражением. Регулярное выражение может использовать ^ или $ для привязки соответствия в начале или конце пути. "

примечание: -i = игнорировать регистр. , , , , -r = регулярное выражение. , , , , ~ / будет расширяться оболочкой в ​​/ home / user (когда ~ / не находится в кавычках). , , , , '\' (baskslash + space, no quotes) - буквальное пространство (чтобы избежать расширения оболочки). Вы можете поместить строку в кавычки, но обязательно оставите ~ / вне кавычек: ~ / my \regex или - / "мое регулярное выражение"

[D53], например. locate -ir ~ /".* "la \ bella \ vita - это то же самое, что найти -ir ~ /".* la bella vita" и будет искать ваш дом каталог для «La Bella Vita», встречающийся где угодно.

Вы также можете ограничить поиск только именем файла, но с помощью -b или - basename .. в этом случае запуск регулярного выражения, строка ^ применяется только к базовому имени ...

Я чаще всего использую locate -bir

PS .. Найти так быстро, что я никогда не использовал find ... и не использовал поиск nautilus (слишком медленно)

С помощью 'locate ', если вы ищете что-то новое, просто запустите sudo updatedb , чтобы обновить базу данных локации ... (но если вы ее недавно добавили, вы, вероятно, знаете, где это :). ...

19
ответ дан 10 August 2018 в 10:02

UPDATE: примечание об использовании опции регулярного выражения locate vs расширение имени файла оболочки в отношении аргументов locate ...

РАСШИРЕНИЕ SHELL FILENAME Когда вы набираете locate / bin / b * (обратите внимание, что нет кавычек), происходит несколько вещей.

  1. Во-первых, shell имя_файла-расширения будет расширять специальный [h26] shell pattern charecter * (Это потому, что * не защищен, т.е. не являются «двойными кавычками»)
  2. Это результирующее расширение представляет собой список имен файлов. который, возможно, очень длинный ... Этот список передается в локализовать столько же аргументов командной строки.
  3. найдите , затем проверяет каждый из этих аргументов на каждый из файлов в своей базе данных и выдает совпадения.

Обратите внимание, что «locate» не имеет понятия текущего рабочего каталога. Он только соответствует вашим аргументам против полностью квалифицированных имен файлов в своей базе данных. Это означает, что он будет соответствовать как / bin / bash , так и / home / user / bin / brackets . У вас определенная степень контроля таким образом, но поиск регулярного выражения предлагает больше; как и некоторые другие варианты локации.

ВАРИАНТ REGEX LOCATE Когда вы набираете locate -r "/bin/b.*", происходят разные вещи, чем с простыми args .. ( shell-extended-args - всего лишь список простых аргументов)

  1. Опция -r сообщает найти для обработки вашего аргумента как шаблона регулярного выражения ,
  2. Кавычки защищают * от расширения файла оболочки. Это означает, что * и точка. теперь специальные символы регулярного выражения
  3. Будучи регулярным выражением, вы можете очень легко сказать «locate», чтобы он соответствовал записи в базе данных различными способами: eg1. locate -r "^ / bin / b. *" создает имена файлов, начинающиеся с / bin / b ... eg2. locate -r ~ / "bin / b. *" создает имена файлов, начинающиеся с / home / user / bin / b .. Обратите внимание, что ~ / не защищено «кавычками» и поэтому подлежит shell tilde-expansion , который преобразует ~ / в / home / user /

Резюме: «расширение оболочки оболочки» совершенно отличается от «regex» [ ! d47]

Вернемся к исходному сообщению:


locate обычно перечисляет всю базу данных в stdout, поэтому для ограничения ее на конкретный каталог, который вам нужен отфильтруйте его ... Вы можете сделать это через опции локации.

Вы можете использовать возможность регулярного выражения locate, а не просто shell-globbing ... ( locate / dir / myfile * - это оболочка) ...

Из info locate : -r , - regex

  • "... (regex) совпадения выполняются против всего имени пути, и поэтому по умолчанию путь будет сопоставлен, если какая-либо его часть совпадает с указанным регулярным выражением. Регулярное выражение может использовать ^ или $ для привязки соответствия в начале или конце пути. "

примечание: -i = игнорировать регистр. , , , , -r = регулярное выражение. , , , , ~ / будет расширяться оболочкой в ​​/ home / user (когда ~ / не находится в кавычках). , , , , '\' (baskslash + space, no quotes) - буквальное пространство (чтобы избежать расширения оболочки). Вы можете поместить строку в кавычки, но обязательно оставите ~ / вне кавычек: ~ / my \regex или - / "мое регулярное выражение"

[D53], например. locate -ir ~ /".* "la \ bella \ vita - это то же самое, что найти -ir ~ /".* la bella vita" и будет искать ваш дом каталог для «La Bella Vita», встречающийся где угодно.

Вы также можете ограничить поиск только именем файла, но с помощью -b или - basename .. в этом случае запуск регулярного выражения, строка ^ применяется только к базовому имени ...

Я чаще всего использую locate -bir

PS .. Найти так быстро, что я никогда не использовал find ... и не использовал поиск nautilus (слишком медленно)

С помощью 'locate ', если вы ищете что-то новое, просто запустите sudo updatedb , чтобы обновить базу данных локации ... (но если вы ее недавно добавили, вы, вероятно, знаете, где это :). ...

19
ответ дан 13 August 2018 в 16:21

Протяните его через grep, как это

$ locate less | grep ^/bin
/bin/bzless
/bin/less
/bin/lessecho
/bin/lessfile
/bin/lesskey
/bin/lesspipe
/bin/zless

Изменить: другой ответ лучше, я не знал, что вы можете передать шаблон для поиска.

12
ответ дан 25 May 2018 в 22:17
  • 1
    @Adam .. Не стоит недооценивать свой метод; это вполне нормально, но вы можете использовать собственное регулярное выражение locate, а не piping to grep .. «" метод, на который вы ссылаетесь, не использует регулярное выражение и ведет себя совершенно по-другому .... Я добавил некоторые подробности о различиях в моем ответе ... – Peter.O 4 April 2011 в 01:04
  • 2
    найти меньше | grep ^ / bin быстрее, чем locate -r ^ / bin /.* less, потому что locate less будет выполнять эффективный поиск слова less, а locate -r будет выполнять операцию регулярного выражения для всех записей в locationb – Marcel Valdez Orozco 17 March 2016 в 21:37
  • 3
    @MarcelValdezOrozco Что такое «эффективный поиск слова»? и почему это быстрее, чем регулярное выражение? – Flashrunner 11 February 2018 в 01:13
  • 4
    @Flashrunner Поскольку locate выполняет поиск O(log(n)) по locatedb, когда вы даете ему поисковый запрос без регулярного выражения, тогда вы можете использовать регулярное выражение grep для выполнения поиска O(m) по уже уменьшенному суб- Результаты. (n = общее количество записей в locatedb [т.е. все файлы вашего диска], m = количество записей, которые меньше соответствуют вашему locatedb), общая сложность работы: O(log(n)) + O(m), где m в среднем log(n), поэтому вы получаете 2*O(log(n)), а не O(n), когда вы выполняете запрос регулярного выражения по всем элементам в locatedb. – Marcel Valdez Orozco 14 February 2018 в 04:52
  • 5
    @MarcelValdezOrozco Но почему поиск без повторного поиска по db равен O(log(n)), а поиск в регулярном выражении - O(n)? Количество записей в db одинаково в каждом случае. Я думаю, это алгоритм поиска? – Flashrunner 14 February 2018 в 20:28

Вы можете использовать locate /rootpath/*filenamespec. Я раньше не пробовал, но он работает. Для вашего примера это будет locate /home/tim/science/*math*

Возможно, вам захочется посмотреть на команду find, а не на locate для такого поведения. Синтаксис будет find rootforsearch -name filenamepattern -print. В этом случае ваш пример потребует find /home/tim/science -name *math* -print. Не так быстро, как найти, поскольку нет базы данных для поиска ... она фактически ищет файловую систему. Существует множество опций, которые вы можете использовать, кроме печати, если вы собираетесь на самом деле что-то делать с файлом.

7
ответ дан 25 May 2018 в 22:17
  • 1
    Это лучший ответ, поскольку он сам использует locate (не требуя никакой другой утилиты, такой как grep), и делает это без регулярных выражений (которые хороши, но в этом случае не нужны). – Tom 9 April 2015 в 15:37
  • 2
    Это работает как шарм, который вы можете использовать для поиска файлов в определенном каталоге Path, благодаря @Nerdfest – amit_game 15 March 2016 в 09:30

Протяните его через grep, как это

$ locate less | grep ^/bin /bin/bzless /bin/less /bin/lessecho /bin/lessfile /bin/lesskey /bin/lesspipe /bin/zless

Изменить: другой ответ лучше, я не знал, что вы можете передать шаблон для поиска.

12
ответ дан 25 July 2018 в 22:16
  • 1
    @Adam .. Не стоит недооценивать свой метод; это вполне нормально, но вы можете использовать собственное регулярное выражение locate, а не piping to grep .. «& quot; метод, на который вы ссылаетесь, не использует регулярное выражение и ведет себя совершенно по-другому .... Я добавил некоторые подробности о различиях в моем ответе ... – Peter.O 4 April 2011 в 01:04
  • 2
    найти меньше | grep ^ / bin быстрее, чем locate -r ^ / bin /.* less, потому что locate less будет выполнять эффективный поиск слова less, а locate -r будет выполнять операцию регулярного выражения для всех записей в locationb – Marcel Valdez Orozco 17 March 2016 в 21:37
  • 3
    @MarcelValdezOrozco Что такое «эффективный поиск слова»? и почему это быстрее, чем регулярное выражение? – Flashrunner 11 February 2018 в 01:13
  • 4
    @Flashrunner Поскольку locate выполняет поиск O(log(n)) по locatedb, когда вы даете ему поисковый запрос без регулярного выражения, тогда вы можете использовать регулярное выражение grep для выполнения поиска O(m) по уже уменьшенному суб- Результаты. (n = общее количество записей в locatedb [т.е. все файлы вашего диска], m = количество записей, которые меньше соответствуют вашему locatedb), общая сложность работы: O(log(n)) + O(m), где m в среднем log(n), поэтому вы получаете 2*O(log(n)), а не O(n), когда вы выполняете запрос регулярного выражения по всем элементам в locatedb. – Marcel Valdez Orozco 14 February 2018 в 04:52
  • 5
    @MarcelValdezOrozco Но почему поиск без повторного поиска по db равен O(log(n)), а поиск в регулярном выражении - O(n)? Количество записей в db одинаково в каждом случае. Я думаю, это алгоритм поиска? – Flashrunner 14 February 2018 в 20:28

Вы можете использовать locate /rootpath/*filenamespec. Я раньше не пробовал, но он работает. Для вашего примера это будет locate /home/tim/science/*math*

Возможно, вам захочется посмотреть на команду find, а не на locate для такого поведения. Синтаксис будет find rootforsearch -name filenamepattern -print. В этом случае ваш пример потребует find /home/tim/science -name *math* -print. Не так быстро, как найти, поскольку нет базы данных для поиска ... она фактически ищет файловую систему. Существует множество опций, которые вы можете использовать, кроме печати, если вы собираетесь на самом деле что-то делать с файлом.

7
ответ дан 25 July 2018 в 22:16
  • 1
    Это лучший ответ, поскольку он сам использует locate (не требуя никакой другой утилиты, такой как grep), и делает это без регулярных выражений (которые хороши, но в этом случае не нужны). – Tom 9 April 2015 в 15:37
  • 2
    Это работает как шарм, который вы можете использовать для поиска файлов в определенном каталоге Path, благодаря @Nerdfest – amit_game 15 March 2016 в 09:30

Протяните его через grep, как это

$ locate less | grep ^/bin /bin/bzless /bin/less /bin/lessecho /bin/lessfile /bin/lesskey /bin/lesspipe /bin/zless

Изменить: другой ответ лучше, я не знал, что вы можете передать шаблон для поиска.

12
ответ дан 26 July 2018 в 20:12
  • 1
    @Adam .. Не стоит недооценивать свой метод; это вполне нормально, но вы можете использовать собственное регулярное выражение locate, а не piping to grep .. «& quot; метод, на который вы ссылаетесь, не использует регулярное выражение и ведет себя совершенно по-другому .... Я добавил некоторые подробности о различиях в моем ответе ... – Peter.O 4 April 2011 в 01:04
  • 2
    найти меньше | grep ^ / bin быстрее, чем locate -r ^ / bin /.* less, потому что locate less будет выполнять эффективный поиск слова less, а locate -r будет выполнять операцию регулярного выражения для всех записей в locationb – Marcel Valdez Orozco 17 March 2016 в 21:37
  • 3
    @MarcelValdezOrozco Что такое «эффективный поиск слова»? и почему это быстрее, чем регулярное выражение? – Flashrunner 11 February 2018 в 01:13
  • 4
    @Flashrunner Поскольку locate выполняет поиск O(log(n)) по locatedb, когда вы даете ему поисковый запрос без регулярного выражения, тогда вы можете использовать регулярное выражение grep для выполнения поиска O(m) по уже уменьшенному суб- Результаты. (n = общее количество записей в locatedb [т.е. все файлы вашего диска], m = количество записей, которые меньше соответствуют вашему locatedb), общая сложность работы: O(log(n)) + O(m), где m в среднем log(n), поэтому вы получаете 2*O(log(n)), а не O(n), когда вы выполняете запрос регулярного выражения по всем элементам в locatedb. – Marcel Valdez Orozco 14 February 2018 в 04:52
  • 5
    @MarcelValdezOrozco Но почему поиск без повторного поиска по db равен O(log(n)), а поиск в регулярном выражении - O(n)? Количество записей в db одинаково в каждом случае. Я думаю, это алгоритм поиска? – Flashrunner 14 February 2018 в 20:28

Вы можете использовать locate /rootpath/*filenamespec. Я раньше не пробовал, но он работает. Для вашего примера это будет locate /home/tim/science/*math*

Возможно, вам захочется посмотреть на команду find, а не на locate для такого поведения. Синтаксис будет find rootforsearch -name filenamepattern -print. В этом случае ваш пример потребует find /home/tim/science -name *math* -print. Не так быстро, как найти, поскольку нет базы данных для поиска ... она фактически ищет файловую систему. Существует множество опций, которые вы можете использовать, кроме печати, если вы собираетесь на самом деле что-то делать с файлом.

7
ответ дан 26 July 2018 в 20:12
  • 1
    Это лучший ответ, поскольку он сам использует locate (не требуя никакой другой утилиты, такой как grep), и делает это без регулярных выражений (которые хороши, но в этом случае не нужны). – Tom 9 April 2015 в 15:37
  • 2
    Это работает как шарм, который вы можете использовать для поиска файлов в определенном каталоге Path, благодаря @Nerdfest – amit_game 15 March 2016 в 09:30

Протяните его через grep, как это

$ locate less | grep ^/bin /bin/bzless /bin/less /bin/lessecho /bin/lessfile /bin/lesskey /bin/lesspipe /bin/zless

Изменить: другой ответ лучше, я не знал, что вы можете передать шаблон для поиска.

12
ответ дан 31 July 2018 в 10:30
  • 1
    @Adam .. Не стоит недооценивать свой метод; это вполне нормально, но вы можете использовать собственное регулярное выражение locate, а не piping to grep .. «& quot; метод, на который вы ссылаетесь, не использует регулярное выражение и ведет себя совершенно по-другому .... Я добавил некоторые подробности о различиях в моем ответе ... – Peter.O 4 April 2011 в 01:04
  • 2
    найти меньше | grep ^ / bin быстрее, чем locate -r ^ / bin /.* less, потому что locate less будет выполнять эффективный поиск слова less, а locate -r будет выполнять операцию регулярного выражения для всех записей в locationb – Marcel Valdez Orozco 17 March 2016 в 21:37
  • 3
    @MarcelValdezOrozco Что такое «эффективный поиск слова»? и почему это быстрее, чем регулярное выражение? – Flashrunner 11 February 2018 в 01:13
  • 4
    @Flashrunner Поскольку locate выполняет поиск O(log(n)) по locatedb, когда вы даете ему поисковый запрос без регулярного выражения, тогда вы можете использовать регулярное выражение grep для выполнения поиска O(m) по уже уменьшенному суб- Результаты. (n = общее количество записей в locatedb [т.е. все файлы вашего диска], m = количество записей, которые меньше соответствуют вашему locatedb), общая сложность работы: O(log(n)) + O(m), где m в среднем log(n), поэтому вы получаете 2*O(log(n)), а не O(n), когда вы выполняете запрос регулярного выражения по всем элементам в locatedb. – Marcel Valdez Orozco 14 February 2018 в 04:52
  • 5
    @MarcelValdezOrozco Но почему поиск без повторного поиска по db равен O(log(n)), а поиск в регулярном выражении - O(n)? Количество записей в db одинаково в каждом случае. Я думаю, это алгоритм поиска? – Flashrunner 14 February 2018 в 20:28

Вы можете использовать locate /rootpath/*filenamespec. Я раньше не пробовал, но он работает. Для вашего примера это будет locate /home/tim/science/*math*

Возможно, вам захочется посмотреть на команду find, а не на locate для такого поведения. Синтаксис будет find rootforsearch -name filenamepattern -print. В этом случае ваш пример потребует find /home/tim/science -name *math* -print. Не так быстро, как найти, поскольку нет базы данных для поиска ... она фактически ищет файловую систему. Существует множество опций, которые вы можете использовать, кроме печати, если вы собираетесь на самом деле что-то делать с файлом.

7
ответ дан 31 July 2018 в 10:30
  • 1
    Это лучший ответ, поскольку он сам использует locate (не требуя никакой другой утилиты, такой как grep), и делает это без регулярных выражений (которые хороши, но в этом случае не нужны). – Tom 9 April 2015 в 15:37
  • 2
    Это работает как шарм, который вы можете использовать для поиска файлов в определенном каталоге Path, благодаря @Nerdfest – amit_game 15 March 2016 в 09:30

Протяните его через grep, как это

$ locate less | grep ^/bin /bin/bzless /bin/less /bin/lessecho /bin/lessfile /bin/lesskey /bin/lesspipe /bin/zless

Изменить: другой ответ лучше, я не знал, что вы можете передать шаблон для поиска.

12
ответ дан 31 July 2018 в 11:31
  • 1
    @Adam .. Не стоит недооценивать свой метод; это вполне нормально, но вы можете использовать собственное регулярное выражение locate, а не piping to grep .. «& quot; метод, на который вы ссылаетесь, не использует регулярное выражение и ведет себя совершенно по-другому .... Я добавил некоторые подробности о различиях в моем ответе ... – Peter.O 4 April 2011 в 01:04
  • 2
    найти меньше | grep ^ / bin быстрее, чем locate -r ^ / bin /.* less, потому что locate less будет выполнять эффективный поиск слова less, а locate -r будет выполнять операцию регулярного выражения для всех записей в locationb – Marcel Valdez Orozco 17 March 2016 в 21:37
  • 3
    @MarcelValdezOrozco Что такое «эффективный поиск слова»? и почему это быстрее, чем регулярное выражение? – Flashrunner 11 February 2018 в 01:13
  • 4
    @Flashrunner Поскольку locate выполняет поиск O(log(n)) по locatedb, когда вы даете ему поисковый запрос без регулярного выражения, тогда вы можете использовать регулярное выражение grep для выполнения поиска O(m) по уже уменьшенному суб- Результаты. (n = общее количество записей в locatedb [т.е. все файлы вашего диска], m = количество записей, которые меньше соответствуют вашему locatedb), общая сложность работы: O(log(n)) + O(m), где m в среднем log(n), поэтому вы получаете 2*O(log(n)), а не O(n), когда вы выполняете запрос регулярного выражения по всем элементам в locatedb. – Marcel Valdez Orozco 14 February 2018 в 04:52
  • 5
    @MarcelValdezOrozco Но почему поиск без повторного поиска по db равен O(log(n)), а поиск в регулярном выражении - O(n)? Количество записей в db одинаково в каждом случае. Я думаю, это алгоритм поиска? – Flashrunner 14 February 2018 в 20:28

Вы можете использовать locate /rootpath/*filenamespec. Я раньше не пробовал, но он работает. Для вашего примера это будет locate /home/tim/science/*math*

Возможно, вам захочется посмотреть на команду find, а не на locate для такого поведения. Синтаксис будет find rootforsearch -name filenamepattern -print. В этом случае ваш пример потребует find /home/tim/science -name *math* -print. Не так быстро, как найти, поскольку нет базы данных для поиска ... она фактически ищет файловую систему. Существует множество опций, которые вы можете использовать, кроме печати, если вы собираетесь на самом деле что-то делать с файлом.

7
ответ дан 31 July 2018 в 11:31
  • 1
    Это лучший ответ, поскольку он сам использует locate (не требуя никакой другой утилиты, такой как grep), и делает это без регулярных выражений (которые хороши, но в этом случае не нужны). – Tom 9 April 2015 в 15:37
  • 2
    Это работает как шарм, который вы можете использовать для поиска файлов в определенном каталоге Path, благодаря @Nerdfest – amit_game 15 March 2016 в 09:30

Протяните его через grep, как это

$ locate less | grep ^/bin /bin/bzless /bin/less /bin/lessecho /bin/lessfile /bin/lesskey /bin/lesspipe /bin/zless

Изменить: другой ответ лучше, я не знал, что вы можете передать шаблон для поиска.

12
ответ дан 2 August 2018 в 03:44
  • 1
    @Adam .. Не стоит недооценивать свой метод; это вполне нормально, но вы можете использовать собственное регулярное выражение locate, а не piping to grep .. «& quot; метод, на который вы ссылаетесь, не использует регулярное выражение и ведет себя совершенно по-другому .... Я добавил некоторые подробности о различиях в моем ответе ... – Peter.O 4 April 2011 в 01:04
  • 2
    найти меньше | grep ^ / bin быстрее, чем locate -r ^ / bin /.* less, потому что locate less будет выполнять эффективный поиск слова less, а locate -r будет выполнять операцию регулярного выражения для всех записей в locationb – Marcel Valdez Orozco 17 March 2016 в 21:37
  • 3
    @MarcelValdezOrozco Что такое «эффективный поиск слова»? и почему это быстрее, чем регулярное выражение? – Flashrunner 11 February 2018 в 01:13
  • 4
    @Flashrunner Поскольку locate выполняет поиск O(log(n)) по locatedb, когда вы даете ему поисковый запрос без регулярного выражения, тогда вы можете использовать регулярное выражение grep для выполнения поиска O(m) по уже уменьшенному суб- Результаты. (n = общее количество записей в locatedb [т.е. все файлы вашего диска], m = количество записей, которые меньше соответствуют вашему locatedb), общая сложность работы: O(log(n)) + O(m), где m в среднем log(n), поэтому вы получаете 2*O(log(n)), а не O(n), когда вы выполняете запрос регулярного выражения по всем элементам в locatedb. – Marcel Valdez Orozco 14 February 2018 в 04:52
  • 5
    @MarcelValdezOrozco Но почему поиск без повторного поиска по db равен O(log(n)), а поиск в регулярном выражении - O(n)? Количество записей в db одинаково в каждом случае. Я думаю, это алгоритм поиска? – Flashrunner 14 February 2018 в 20:28

Вы можете использовать locate /rootpath/*filenamespec. Я раньше не пробовал, но он работает. Для вашего примера это будет locate /home/tim/science/*math*

Возможно, вам захочется посмотреть на команду find, а не на locate для такого поведения. Синтаксис будет find rootforsearch -name filenamepattern -print. В этом случае ваш пример потребует find /home/tim/science -name *math* -print. Не так быстро, как найти, поскольку нет базы данных для поиска ... она фактически ищет файловую систему. Существует множество опций, которые вы можете использовать, кроме печати, если вы собираетесь на самом деле что-то делать с файлом.

7
ответ дан 2 August 2018 в 03:44
  • 1
    Это лучший ответ, поскольку он сам использует locate (не требуя никакой другой утилиты, такой как grep), и делает это без регулярных выражений (которые хороши, но в этом случае не нужны). – Tom 9 April 2015 в 15:37
  • 2
    Это работает как шарм, который вы можете использовать для поиска файлов в определенном каталоге Path, благодаря @Nerdfest – amit_game 15 March 2016 в 09:30

Протяните его через grep, как это

$ locate less | grep ^/bin /bin/bzless /bin/less /bin/lessecho /bin/lessfile /bin/lesskey /bin/lesspipe /bin/zless

Изменить: другой ответ лучше, я не знал, что вы можете передать шаблон для поиска.

12
ответ дан 4 August 2018 в 19:48
  • 1
    @Adam .. Не стоит недооценивать свой метод; это вполне нормально, но вы можете использовать собственное регулярное выражение locate, а не piping to grep .. «& quot; метод, на который вы ссылаетесь, не использует регулярное выражение и ведет себя совершенно по-другому .... Я добавил некоторые подробности о различиях в моем ответе ... – Peter.O 4 April 2011 в 01:04
  • 2
    найти меньше | grep ^ / bin быстрее, чем locate -r ^ / bin /.* less, потому что locate less будет выполнять эффективный поиск слова less, а locate -r будет выполнять операцию регулярного выражения для всех записей в locationb – Marcel Valdez Orozco 17 March 2016 в 21:37
  • 3
    @MarcelValdezOrozco Что такое «эффективный поиск слова»? и почему это быстрее, чем регулярное выражение? – Flashrunner 11 February 2018 в 01:13
  • 4
    @Flashrunner Поскольку locate выполняет поиск O(log(n)) по locatedb, когда вы даете ему поисковый запрос без регулярного выражения, тогда вы можете использовать регулярное выражение grep для выполнения поиска O(m) по уже уменьшенному суб- Результаты. (n = общее количество записей в locatedb [т.е. все файлы вашего диска], m = количество записей, которые меньше соответствуют вашему locatedb), общая сложность работы: O(log(n)) + O(m), где m в среднем log(n), поэтому вы получаете 2*O(log(n)), а не O(n), когда вы выполняете запрос регулярного выражения по всем элементам в locatedb. – Marcel Valdez Orozco 14 February 2018 в 04:52
  • 5
    @MarcelValdezOrozco Но почему поиск без повторного поиска по db равен O(log(n)), а поиск в регулярном выражении - O(n)? Количество записей в db одинаково в каждом случае. Я думаю, это алгоритм поиска? – Flashrunner 14 February 2018 в 20:28

Вы можете использовать locate /rootpath/*filenamespec. Я раньше не пробовал, но он работает. Для вашего примера это будет locate /home/tim/science/*math*

Возможно, вам захочется посмотреть на команду find, а не на locate для такого поведения. Синтаксис будет find rootforsearch -name filenamepattern -print. В этом случае ваш пример потребует find /home/tim/science -name *math* -print. Не так быстро, как найти, поскольку нет базы данных для поиска ... она фактически ищет файловую систему. Существует множество опций, которые вы можете использовать, кроме печати, если вы собираетесь на самом деле что-то делать с файлом.

7
ответ дан 4 August 2018 в 19:48
  • 1
    Это лучший ответ, поскольку он сам использует locate (не требуя никакой другой утилиты, такой как grep), и делает это без регулярных выражений (которые хороши, но в этом случае не нужны). – Tom 9 April 2015 в 15:37
  • 2
    Это работает как шарм, который вы можете использовать для поиска файлов в определенном каталоге Path, благодаря @Nerdfest – amit_game 15 March 2016 в 09:30

Вы можете использовать locate /rootpath/*filenamespec.I раньше не пробовал, но он работает. Для вашего примера это будет locate / home / tim / science / * math *

Возможно, вы захотите посмотреть на команду find чем найти для такого поведения. Синтаксисом будет find rootforsearch -name filenamepattern -print . В этом случае ваш пример потребует find / home / tim / science -name * math * -print . Не так быстро, как найти, поскольку нет базы данных для поиска ... она фактически ищет файловую систему. Существует множество опций, которые вы можете использовать, кроме печати, если вы собираетесь на самом деле что-то делать с файлом.

7
ответ дан 6 August 2018 в 03:51

Протяните его через grep, как это

  $ найдите меньше |  grep ^ / bin / bin / bzless / bin / less / bin / lessecho / bin / lessfile / bin / lesskey / bin / lesspipe / bin / zless  

Изменить: другой ответ лучше , Я не знал, что вы можете передать шаблон для поиска.

12
ответ дан 6 August 2018 в 03:51

Вы можете использовать locate /rootpath/*filenamespec.I раньше не пробовал, но он работает. Для вашего примера это будет locate / home / tim / science / * math *

Возможно, вы захотите посмотреть на команду find чем найти для такого поведения. Синтаксисом будет find rootforsearch -name filenamepattern -print . В этом случае ваш пример потребует find / home / tim / science -name * math * -print . Не так быстро, как найти, поскольку нет базы данных для поиска ... она фактически ищет файловую систему. Существует множество опций, которые вы можете использовать, кроме печати, если вы собираетесь на самом деле что-то делать с файлом.

7
ответ дан 7 August 2018 в 21:48

Протяните его через grep, как это

  $ найдите меньше |  grep ^ / bin / bin / bzless / bin / less / bin / lessecho / bin / lessfile / bin / lesskey / bin / lesspipe / bin / zless  

Изменить: другой ответ лучше , Я не знал, что вы можете передать шаблон для поиска.

12
ответ дан 7 August 2018 в 21:48

Протяните его через grep, как это

  $ найдите меньше |  grep ^ / bin / bin / bzless / bin / less / bin / lessecho / bin / lessfile / bin / lesskey / bin / lesspipe / bin / zless  

Изменить: другой ответ лучше , Я не знал, что вы можете передать шаблон для поиска.

12
ответ дан 10 August 2018 в 10:02

Другие вопросы по тегам:

Похожие вопросы: