Получение только определенного шаблона с использованием locate [duplicate]

Я допустил ошибку при копировании одних и тех же файлов в разные разделы с хорошими намерениями обрезания (удаления) их из источника или цели (ов) позже. Теперь, когда я пытаюсь найти их, я получаю слишком много результатов из команды locate:

rick@alien:~$ locate "display-auto-brightness" /etc/cron.d/display-auto-brightness /home/rick/Pictures/display-auto-brightness conky.png /home/rick/Pictures/display-auto-brightness systray.png /home/rick/Pictures/display-auto-brightness-config 1.png /home/rick/Pictures/ps display-auto-brightness.png /lib/systemd/system-sleep/display-auto-brightness /mnt/e/etc/cron.d/display-auto-brightness /mnt/e/lib/systemd/system-sleep/display-auto-brightness /mnt/e/usr/local/bin/display-auto-brightness /usr/local/bin/display-auto-brightness

Команда locate автоматически помещает * wild card после строки поиска и возвращает лишние нежелательные Результаты. Файлы .png не должны возвращаться.

Почему locate возвращает слишком много результатов?

2
задан 30 March 2018 в 03:24

2 ответа

Команда locate автоматически помещает * wild card после строки поиска и возвращает лишние нежелательные результаты.

Это поведение по умолчанию locate. См. [F7]:

If any PATTERN contains no globbing characters, locate behaves as if the pattern were *PATTERN*.

Чтобы соответствовать только имени файла, явно задайте glob в компоненте пути:

locate '*/display-auto-brightness'

Или используйте регулярное выражение и --basename вариант для сопоставления точного имени файла:

locate --basename --regex '^display-auto-brightness$'

Или, учитывая результаты, которые вы показали, вы могли бы просто просить пути, которые содержат display-auto-brightness в конце:

locate --regex 'display-auto-brightness$'

Я оставлю это вам, чтобы использовать это в скрипте, перебирающем каждое имя файла в каталоге.

2
ответ дан 17 July 2018 в 18:32
Команда locate автоматически помещает * wild card после строки поиска и возвращает лишние нежелательные результаты.

Это поведение по умолчанию locate. См. [F7]:

If any PATTERN contains no globbing characters, locate behaves as if the pattern were *PATTERN*.

Чтобы соответствовать только имени файла, явно задайте glob в компоненте пути:

locate '*/display-auto-brightness'

Или используйте регулярное выражение и --basename вариант для сопоставления точного имени файла:

locate --basename --regex '^display-auto-brightness$'

Или, учитывая результаты, которые вы показали, вы могли бы просто просить пути, которые содержат display-auto-brightness в конце:

locate --regex 'display-auto-brightness$'

Я оставлю это вам, чтобы использовать это в скрипте, перебирающем каждое имя файла в каталоге.

2
ответ дан 23 July 2018 в 19:20

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

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