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

Введение

Это статья про применение команды 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" {} \;

Автор статьи: Андрей Олегович