Linux find только имена файлов

How can I use grep to show just filenames on Linux? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.

This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.

How can I use grep to show just file-names (no in-line matches) on Linux? I am usually using something like:

find . -iname "*php" -exec grep -H myString <> \; 

How can I just get the file-names (with paths), but without the matches? Do I have to use xargs? I didn’t see a way to do this on my grep man page.

Great question. I actually started using this to open a list of files returned by grep in Vim. vim $(grep -rl Something app/)

You cannot list files using grep command, it is basically used to fetch desired text from a file or a list. For instance, ps aux | grep ‘apt-get’ or grep ‘text-to-find’ /path/to/file/

@iamjayp Ummm, you can too list files using the grep command. grep -lr ‘text-to-find’ ./* works quite nicely!

@Peter Moderators can only migrate questions that are less than 60 days old. Therefore, for old questions that are nevertheless off-topic here because they’re not about programming, closing them is our only option. I feel strongly that such questions should not be deleted, because that is destructive of value, but reopening them also makes no sense because it sets a bad example to users who are unaware that SO limits themselves only to programming questions.

Источник

Поиск в Linux с помощью команды find

Обновлено

Обновлено: 01.02.2022 Опубликовано: 25.07.2016

Утилита find представляет универсальный и функциональный способ для поиска в Linux. Данная статья является шпаргалкой с описанием и примерами ее использования.

Общий синтаксис

путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.». набор правил, по которым выполнять поиск. * по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.

Описание опций

Также доступны логические операторы:

Оператор Описание
-a Логическое И. Объединяем несколько критериев поиска.
-o Логическое ИЛИ. Позволяем команде find выполнить поиск на основе одного из критериев поиска.
-not или ! Логическое НЕ. Инвертирует критерий поиска.

Полный набор актуальных опций можно получить командой man find.

Примеры использования find

Поиск файла по имени

* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня /.

2. Поиск файла по части имени:

Читайте также:  Upload folder linux ftp

* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp

а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:

find . -name «sess_*» -a -name «*cd»

б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:

find . -name «sess_*» -o -name «*cd»

в) Более компактный вид имеют регулярные выражения, например:

* где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).

4. Найти все файлы, кроме .log:

* в данном примере мы воспользовались логическим оператором !.

Поиск по дате

1. Поиск файлов, которые менялись определенное количество дней назад:

* данная команда найдет файлы, которые менялись более 60 дней назад.

find . -mmin -20 -mmin +10 -type f

* найти все файлы, которые менялись более 10 минут, но не более 20-и.

2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find —version).

find . -type f -newermt «2019-11-02 00:00»

* покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.

find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02

* найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).

find . -type f -newerat 2019-10-08

* все файлы, к которым обращались с 08.10.2019.

find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01

* все файлы, к которым обращались в октябре.

find . -type f -newerct 2019-09-07

* все файлы, созданные с 07 сентября 2019 года.

find . -type f -newerct 2019-09-07 ! -newerct «2019-09-09 07:50:00»

* файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50

По типу

Искать в текущей директории и всех ее подпапках только файлы:

* f — искать только файлы.

Поиск по правам доступа

1. Ищем все справами на чтение и запись:

2. Находим файлы, доступ к которым имеет только владелец:

Поиск файла по содержимому

find / -type f -exec grep -i -H «content» <> \;

* в данном примере выполнен рекурсивный поиск всех файлов в директории / и выведен список тех, в которых содержится строка content.

С сортировкой по дате модификации

find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r

* команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.

Лимит на количество выводимых результатов

Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:

find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r | head -n 1

Поиск с действием (exec)

1. Найти только файлы, которые начинаются на sess_ и удалить их:

find . -name «sess_*» -type f -print -exec rm <> \;

* -print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.

2. Переименовать найденные файлы:

find . -name «sess_*» -type f -exec mv <> new_name \;

find . -name «sess_*» -type f | xargs -I ‘<>‘ mv <> new_name

3. Переместить найденные файлы:

Читайте также:  Смена пользователя консоль линукс

find . -name «sess_*» -type f -exec mv <> /new/path/ \;

* в данном примере мы переместим все найденные файлы в каталог /new/path/.

4. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:

find /home/user/* -type d -exec chmod 2700 <> \;

* в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.

6. Передать найденные файлы конвееру (pipe):

find /etc -name ‘*.conf’ -follow -type f -exec cat <> \; | grep ‘test’

* в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.

7. Произвести замену в файлах с помощью команды sed:

find /opt/project -type f -exec sed -i -e «s/test/production/g» <> \;

* находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.

Чистка по расписанию

Команду find удобно использовать для автоматического удаления устаревших файлов.

Открываем на редактирование задания cron:

0 0 * * * /bin/find /tmp -mtime +14 -exec rm <> \;

* в данном примере мы удаляем все файлы и папки из каталога /tmp, которые старше 14 дней. Задание запускается каждый день в 00:00.
* полный путь к исполняемому файлу find смотрим командой which find — в разных UNIX системах он может располагаться в разных местах.

Источник

Как получить только имя файла с linux `find`?

@Urchin Нет причин, по которым это не должно происходить, если у вас правильная логика (то есть -o имеет более низкий приоритет, чем подразумеваемый -a , поэтому вы часто захотите сгруппировать аргументы -o )

find ./ -name «*» -printf «%f\n» | xargs grep «searchName» Это не работает, будет только печатать: about.php: Нет такого файла или каталога. grep: site-themes.php: Нет такого файла или каталога. Или find ./ -name «*» | xargs grep «searchName» -printf «%f\n» все еще ошибка

Я не думаю, что это правильный ответ. find -printf «%f\n» -exec echo <> \; показывает, что оригинальное имя файла передается вперед

Если ваша находка не имеет опции -printf, вы также можете использовать базовое имя:

find ./dir1 -type f -exec basename <> \; 

Если вы используете GNU find

Или вы можете использовать язык программирования, такой как Ruby (1.9 +)

Если вам предлагается bash (не менее 4) решение

shopt -s globstar for file in **; do echo $; done 

Используйте -execdir , который автоматически удерживает текущий файл в <> , например:

find . -type f -execdir echo '<>' ';' 

Вы также можете использовать $PWD вместо . (на некоторых системах он не будет создавать дополнительную точку спереди).

-execdir utility [argument . ] ;

Первичный -execdir идентичен первичному элементу -exec , за исключением того, что утилита будет выполнена из каталога, в котором хранит текущий файл.

При использовании + вместо ; , тогда <> заменяется как можно большим количеством путей для каждого вызова утилиты. Другими словами, он будет печатать все имена файлов в одной строке.

Я получаю ./filename вместо имени filename . В зависимости от ваших потребностей, это может или не может быть хорошо.

Читайте также:  Change language in linux terminal

Если вы хотите выполнить какое-либо действие только с именем файла, использование basename может быть жестким.

find ~/clang+llvm-3.3/bin/ -type f -exec echo basename <> \; 

будет просто отвечать на basename /my/found/path . Не то, что мы хотим, если хотим выполнить в имени файла.

Но вы можете сделать xargs вывод. например, чтобы убить файлы в каталоге, основанные на именах в другом каталоге:

cd dirIwantToRMin; find ~/clang+llvm-3.3/bin/ -type f -exec basename <> \; | xargs rm 

Я нашел решение (на странице makandracards), которое дает только самое новое имя файла:

Ещё вопросы

  • 1 Моя реализация обнаружения столкновений не ведет себя нормально
  • 0 Окно браузера Chrome
  • 0 Преобразование PHP в Python для получения смещения часового пояса
  • 0 Лучший способ для двух последовательных таблиц SELECT
  • 0 Асинхронный обратный вызов не был вызван в течение тайм-аута — модульное тестирование службы Typescript & Angular $ http
  • 1 Как отключить быструю загрузку в новом «Android Device Manager» Xamarin?
  • 1 Eclipse PDE: имитирует IResourceChangeEvents для создания IJavaProject между PDE и рабочим пространством разработчика?
  • 0 Ширина CSS браузеров
  • 0 Функция AngularJS ng-click не работает после содержимого информационного окна $ compile map
  • 1 Как проверить Http / 2 через ohttp?
  • 0 Кодировка сервера Mysql отличается от кодировки клиента (latin1 vs utf8mb4). Насколько плохо?
  • 0 2 указателя даты в одном поле ввода
  • 0 когда запускается SDL_MOUSEBUTTONUP?
  • 0 HTML с использованием ASP
  • 1 Как получить выбранный документ на viewPanel xPage для данных внешнего источника?
  • 0 Какую версию Nsight можно использовать в CUDA5.5 в VisualStudio2010?
  • 0 Выполнение запроса занимает много времени в AWS RDS
  • 0 Функция C ++, возвращающая строку с запятой
  • 0 Функция моего друга не выполняется
  • 0 Проверять, что все флажки сняты?
  • 0 кодирование значения объекта в функции ng-click
  • 1 Как получить доступ к user_posts в Facebook Graph API
  • 0 Замена липкого заголовка вторым заголовком, когда он достигает текущего застрявшего заголовка
  • 0 Показать разделы на основе значения флажка в jQuery (SharePoint 2010)
  • 0 сгенерированный файл MSM
  • 1 Получить значение вычисляемого свойства в Vue.js и использовать его в свойстве данных
  • 1 Как получить неуправляемый C-массив переменной длины в структуре из C в C #?
  • 1 Есть ли способ отправить письмо из Spotfire одним нажатием кнопки?
  • 0 Слияние сложных массивов
  • 0 Как запретить Tomcat 7 / Spring / Tiles обрезать пробелы в выводе HTML
  • 1 Razor DropDownListFor SelectList, как связать неисчислимые селекты или как это сделать?
  • 1 Исключение NoClassDefFoundError
  • 0 Код отслеживания не установлен (Google Analytics)
  • 1 Ошибка формата даты в Java
  • 1 чтение структуры каталогов и преобразование ее в объект JSON в Java
  • 1 Как закрыть полноэкранную рекламу, не нажимая кнопку закрытия?
  • 1 Вложено для петли в терминале
  • 0 Ошибки округления, дающие неправильные тесты в DFT?
  • 0 текстовый текст getSuggestions в диалоге jQuery
  • 0 NodeJS асинхронный вызов MySQL к пулу соединений не возвращает результата
  • 0 Присвойте значение текстовому окну gridview, используя jquery
  • 0 Присоединиться по user_id в Symfony
  • 1 Звук не играет ожидаемое количество раз
  • 0 Выдвижной ящик плохой FPS на мобильном телефоне
  • 0 Простой селектор jQuery
  • 0 Детрукторы и унаследованные функции c ++
  • 0 Как правильно выполнить sql в скриптах с закрытыми классами
  • 1 Я не понимаю, как я получаю этот вывод (в цепочке операторов)
  • 0 HTML-форма Codeigniter — нельзя нажимать на поля ввода
  • 0 Экспресс-проверка Paypal не отображается должным образом в Firefox

Источник

Оцените статью
Adblock
detector