Поиск текста по файлам в Linux:
grep -rl 'text' /var/www/
- ищем файлы, в которых имеется ‘text’
grep -rl 'text' ./
- то же, но в текущей категории..
Поиск и удаление файлов, содержащих строку
78.46.14.162
find /var/named/ -type f -exec grep "MX" {} ; -print | grep named
(имя файла и найденный текст)
find . -name '*.*htm*' -exec grep -i iframe {} ; -print | less
ищем iframe (файлы, перезаписанные вирусом).
Массовый поиск и замена в файлах:
sed -i~ "s/search text/replace text/g" index.php
i~ - флаг, указывающий на то, что оригинальный файл будет сохранен как file.ext~
g - заменяем не только первое вхождение
поиск и замена в нескольких файлах с использованием perl
perl -pi~ -e 's/foo/bar/' [files]
Поиск и замена с использованием sed (ищем скрипт и заменяем его на комментарий. Экранируем восклицательный знак:
sed -i.~ "s/≶script>var k;.*script>/≶\!-- deleted -->/g" index.php
Флаг -i (inplace) означает, что результат следует сделать в файле. При наличии символов после -i резервная копия сохраняется в соответствующий файл (некоторые системы не дают выполнить команду с флагом -i без сохранения резервной копии).
Для удобства дальнейшего удаления использую -i.~ (можно -i.bak - сохранит файлы, добавляя расширение bak). Дальнейшее удаление при помощи команды find + delete
find ./ -name '*.~' -delete
http://mywiki.wooledge.org/BashFAQ/021
Пригодилось при замене вирусных кодов на сайте - первым этапом поиск файлов, затем - дальнейшая замена. В принципе, можно сделать всё одним махом. В случае замены флаг -i
Подсчет количества конкретных слов в файле:
http://www.linux.org.ru/forum/general/5120319
Поиск строки с указанием её номера grep -n ‘needle’ file.txt
Просмотр файла, начиная со строки 532
more +532 file.txt
Массовое переименование файлов в linux - rename регулярка (/что заменять/на что заменять/ в каких файлах)
rename "s/.JPG/.jpg/g" *.JPG
http://www.cyberciti.biz/tips/renaming-multiple-files-at-a-shell-prompt.html
Поиск файлов по размеру
Для удаления файлов, найденных командой find достаточно указать дополнительный параметр -delete
Поиск php файлов размером 535 байт (c - указывает на размер в байтах, по умолчанию - в блоках 512)
find ./ -type f -name '*.php' -size 599c
При указании размера со знаком плюс или минус - происходит поиск файлов соответственно больше или меньше указанного значения.
Поиск подстроки в недавно модифицированных файлах (40 дней назад ! минус перед числом обязателен):
find ./ -name "*.php" -mtime -40 -exec grep "breadcrumb" {} \;
Поиск файлов find + последующий grep для них (find + exec grep).. во второй строчке - ещё и удаление
find ./ -type f -name '*.php' -size 599c -exec grep -l "c1120ba44a14664ed80cfa5a18832c1b9b39dec0" {} \;
find ./ -type f -size 599c -exec grep -l "c1120ba44a14664ed80cfa5a18832c1b9b39dec0" {} \; -delete
Поиск файлов больше мегабайта (+1M) меньше (-1M)
find ./ -type f -size +1M
Поиск файлов с нулевой длиной
find ./ -type f -size 0
Поиск и удаление файлов с нулевой длиной (вторым парамтером - путь к каталогу.. ./ означает текущий
find ./ -type f -size 0 -delete
Поиск номеров строк в файле (чтобы grep вывел номер строки - используем с параметром -n)
Чтобы вытащить определённые строки из файла (или удалить строки в начале файла и в конце файла), можно использовать sed - выведет строки с 4 по 17
sed -n '3,10p' file.txt
Переместить файлы размером >2Mb в каталог /tmp (и вообще выполнить любую команду с файлами)
find ./ -size +2M -exec cp {} /tmp \;
Ресайз всех изображений в каталоге, размер которых превышает 2М
find ./ -size +2M -exec convert {} -resize 1200x1200 {} \;
Ресайз всех изображений, по маске
find ./ -name '493_*' -exec convert {} -resize 1200x1200 {} \;
Рекурсивно удалить все .svn директории в подкаталогах
find . -name ".svn" -exec rm -rf {} \;