Отображение сведений о файле (размер, дата и т. д.) из Linux команда" locate"?

(медленно) в Linux "найти" команду имеет возможность, "-ЛС", чтобы отобразить размер, дата и т. д. как команда" ls-l". Но команда "найти", похоже, не имеет этого. Итак, как я могу получить эквивалентную функциональность с помощью locate?

я использовал обратные тики, чтобы передать вывод locate в ls, например:

ls -al `locate -e somefile`

...который работает, пока существует somefile. Но если somefile не существует, он дает мне полный список каталогов.

если я делаю это:

ls -al `locate -e somefile` thisfileneverexists

...тогда это работает, если вы не против строки ошибки:

ls: cannot access thisfileneverexists: No such file or directory

...что приводит нас к очевидному-но-крайне-уродливое решение:

ls -al `locate -e somefile` thisfileneverexists 2>/dev/nul

это работает, но, конечно, есть лучший способ!

30
задан Dave Burton
20.05.2023 10:12 Количество просмотров материала 3108
Распечатать страницу

3 ответа

использовать xargs. Это принимает в качестве входных данных ряд параметров и выполняет над ними операцию:

 locate -eb0P somefile | xargs -r0 ls -ald

xargs будет выполнять ls -ald команда, использующая Результаты поиска в качестве параметров.

-e переключатель говорит locate, чтобы проверить, что файлы, найденные в базе данных действительно существуют, и игнорировать любые, которые не.

-b переключатель говорит найти, чтобы соответствовать только имена.

-0 (ноль) указывает найдите генерировать нулевые разделители вместо пробелов (чтобы он мог обрабатывать имена файлов, которые содержат пробелы)

-P переключатель сообщает locate список сломанных символических ссылок

-r переключатель говорит xargs не выполнять команду, если ничего не передается в-ie, когда locate ничего не возвращает.

-0 - указывает размер ожидать нули, а не пробелы как разделители

-a - указывает LS в список даже файлы, начинающиеся с "."

-d переключатель сообщает ls список каталогов, а не их содержимое

11
отвечен Paul 2023-05-21 18:00

сохранить результат locate в переменной проверьте, имеет ли она какое-либо значение, а затем просмотрите его.

f=`locate ...`
[ "$f" ] && ls -al "$f"

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

3
отвечен Ignacio Vazquez-Abrams 2023-05-21 20:17

вы также можете цикла через locate выход:

locate somefile | while IFS= read -r i; do ls -la "$i"; done
0
отвечен terdon 2023-05-21 22:34

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх