Продвинутое применение команды find Linux

Содержание
Введение
Переместить определённые файлы но не директории
find + sed
find + grep
find + xargs

Введение

Это статья про применение команды find совместно с grep , sed , xargs и другими утилитами

Про основы применения find вы можете прочитать в статье «Основы поиска с find»

Переместить определённые файлы но не директории

Переместить файлы начинающиеся на определённые символы в другую директорию, но не трогать директории с подобными названиями

find -maxdepth 1 -type f -name 'sub*' -exec mv {} subprocess \;

find + sed

К результатам команды find можно сразу же применить sed

find . -type f -name '*.php' -exec sed -i 's@python/old_file_name\.php@python/new_directory/new_name\.php@' {} \;

. означает, что ищем в текущей директории (и вложенных)

Эта команда заменяет везде

python/old_file_name.php

на

python/new_directory/new_name.php

Следующий пример

find . -type f -name '*.php' -exec sed -n '/\/i\/aws\/oauth.php/ p' {} \;

Эта команда ищет по всем .php файлам строку /i/aws/oauth.php

Если нужно не найти или заменить строку а показать название файла, в котором есть определённые символы - удобно воспользоваться связкой find + grep

Добавить в функцию my_function дополнительный аргумент - сразу в всех .php файлах.

find -type f -name "*.php" -exec sed 's/my_function(\$old_arg1,\ \$old_arg2)/my_function(\$old_arg1,\ \$old_arg2,\ \$new_arg1/' {} \;

find -type f -name "*.php" -exec sed 's/my\_function(\$old\_arg1,\ \$old\_arg2)/my\_function(\$old\_arg1,\ \$old\_arg2,\ \$new\_arg1/' {} \;

find + grep

К результатам команды find можно сразу же применить grep

find . -type f -name '*.php' -exec grep -l '/dvps/aws/oauth.php' {} \;

Эта команда ищет по всем .php файлам строку /i/aws/oauth.php и показывает в каком файле встречается эта строка

xargs

Вместо exec часто бывает эффективнее использовать команду xargs

find . -type f -name '*.php' | xargs grep -l '/dvps/aws/oauth.php'

Чтобы найти все файлы, которые не содержат определённую строку можно также испольовать xargs и grep -L

find -type f | xargs grep -L "text"

tree grep/

grep/ ├── a ├── b ├── c └── d 0 directories, 4 files

cat a b c d

www.beget.com www.heihei.ru www.topbicyle.ru www.aredel.com

find . -type f | xargs grep -L ".com"

./b ./c

find . -type f -name '*.php' ! -name '*RelatedArticles.php' ! -name '*_inc.php' -not -path './.php/*' | xargs grep -L "og_im age" {} \;

Похожие статьи
Linux
FAQ
Debian
Ubuntu
CentOS
Rocky
Bash
Настройка сети
Файлы, директории, ссылки…
Изучить свободное место на диске
Объединить .pdf файлы
diff: сравнение файлов
find: поиск файлов
wget: скачивание файлов
kill: завершить процесс
curl
make
signal: системные сигналы
env: переменные окружения
localectl: язык
systemctl: Список активных сервисов
Firewall
SCP: обмен файлами;
SSH: удалённый доступ
cron: задания по расписанию
sudo
Мониторинг ресурсов
C
C++