ls -R /media/X | grep filename
позволяет мне искать имена файлов, но печатает только имя файла, а не каталог, в котором он находится. Как я могу напечатать имя файла и его каталог?
3 ответа
ls
и grep
не совсем подходящие инструменты для этого; Вы хотите команду find
.
find /media/X -name '*filename*'
Это также позволяет вам искать другие условия, такие как возраст.
Вы можете использовать команду find
для этих целей.
Пытаться
find /media/X | grep filename
Вы можете достичь тех же результатов без grep
(как указывает @geekosaur), но синтаксис find
может быть проблематичным, если вы уже использовали grep
.
Принятый в настоящее время ответ от @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 снова с большей вероятностью вернет правильный результат.