1

ls -R /media/X | grep filename позволяет мне искать имена файлов, но печатает только имя файла, а не каталог, в котором он находится. Как я могу напечатать имя файла и его каталог?

3 ответа3

5

ls и grep не совсем подходящие инструменты для этого; Вы хотите команду find .

find /media/X -name '*filename*'

Это также позволяет вам искать другие условия, такие как возраст.

4

Вы можете использовать команду find для этих целей.

Пытаться

find /media/X | grep filename

Вы можете достичь тех же результатов без grep (как указывает @geekosaur), но синтаксис find может быть проблематичным, если вы уже использовали grep .

0

Принятый в настоящее время ответ от @Dennis будет потреблять огромное количество ресурсов процессора и / или ввода-вывода, если в каталоге /media/X много файлов, так как find будет рекурсивно перечислять все по заданному пути, если не используются некоторые ограничивающие флаги. В среднем случае это может не иметь значения, но глубокая рекурсия с последующим выделением чрезмерно длинного списка, безусловно, не оптимальна.

Обычно вы получаете более быстрые результаты, используя команду locate (например, из пакета mlocate ). Например:

$ locate virtualbox/README.Debian
/usr/share/doc/virtualbox/README.Debian.gz
/usr/share/doc/virtualbox/README.Debian.html

Основным ограничением этого подхода является то, что различные пакеты locate обычно не индексируют частные домашние каталоги в ecryptfs, что может быть проблемой для пользователей Ubuntu. Поскольку OP использует Ubuntu, я бы порекомендовал использовать locate для системных файлов и найти с некоторыми разумными ограничивающими флагами все, что хранится в монтировании ecryptfs.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .