Продвинутое применение команды 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" {} \;
РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе
Конец рекламы. Если там пусто считайте это рекламой моей телеги