Syntax highlighting of
linux/cli
<<TableOfContents()>>
= Comand Line Interface =
== Поиск файлов ==
Поиск
{{{#!highlight bash
# --- найти конкретный файл
find / -name 'postgresql.conf'
# --- найти все файлы по шаблону в текущей директории
find . -type f -name '*.rb'
# --- не учитывать регистр при поиске по имени:
find . -iname "test*"
# --- поиск файлов по имени только в текущей папке:
find . -maxdepth 1 -name "*.php"
# --- найти файлы в директории, которые не соответствуют шаблону:
find /some/path -not -name "test*"
# --- найти все jar-файлы и исключить результаты, которые содержат поддиректорию tmp
find . -not -regex '.*/tmp/.*' -name '*.jar'
# --- найти все файлы с раширением .html или .php:
find /some/path -name "*.html" -o -name "*.php"
# --- найти все файлы, принадлежащие пользователю evgeniy:
find /some/path -user evgeniy
# --- найти все файлы размером 50 мегабайт:
find /some/path -type f -size 50M
# --- найти все файлы от пятидесяти до ста мегабайт:
find /some/path -type f -size +50M -size -100M
}}}
Поиск и замена
{{{#!highlight bash
# --- замена всех вхождений в файлах директории
find . -name '*.php' -exec sed -i -e 's/www.fubar.com/www.fubar.ftw.com/g' {} \;
}}}
Поиск и удаление
{{{#!highlight bash
# --- поиск файлов и удаление найденных
find / -name .DS_Store -exec rm {} +
# --- удалить все log-файлы больше 100 мегабайт:
find /home/evgeniy/log -type f -name "*.log" -size +100M -exec rm -f {} \;
find /home/evgeniy/log -type f -name "*.log" -size +100M -exec rm -f {} +
}}}
Поиск и что-то еще...
{{{#!highlight bash
# --- найти и посчитать количество найденных файлов
find . -type f -name '*.rb' | wc -l
# --- вывести 10 первых строк каждого найденого файла записать в sources.txt
find . -type f -name '*.rb' -print -exec head {} \; > sources.txt
# --- найти файлы по wildcard с отображением размера
find -name '*abcd*' -print0 | xargs -0 ls -l
# --- поиск заданной строки в файлах, найденных через find (в большом количестве файлов)
# (1) ищем файлы по имени (2) ищем в найденных те, которые содержат заданный контент
find ../xml/223/77/ -type f -name 'purchaseNotice_*' | xargs grep 'jointPurchase>true' | head
# --- (1) ищем файлы по имени (2) ищем в найденных те, которые НЕ содержат заданный контент
find ../xml/223/77/ -type f -name 'purchaseNotice_*' | xargs grep -L '<jointLotData>' | head
# --- поиск файла внутри архивов в заданной директории
for f in *.zip; do echo "$f: "; unzip -l $f | grep <filename>; done
# --- поиск заданной строки внутри архива
zgrep 'article15FeaturesInfo' notifications/*
}}}
== Сколько? ==
{{{#!highlight bash
# --- количество байтов в выводе другой команды
output=$(your_program)
size=$(echo "$output" | wc -c)
echo "Size in bytes: $size"
# --- количество файлов в текущей директории и поддиректориях
ls -laR | grep "^-" | wc
}}}
== Grep ==
{{{#!highlight bash
# --- grep in grep in grep
# grep by multipal strings in files ("grep AND")
# на вход команды grep можно передать ограниченное кол-во файлов (команда head)
grep -rl 'Rejected' $(grep -rl 'admissionResults' $(grep -rl 'fcsProtocolEF1' . | head -n 1000))
}}}
== Разное ==
{{{#!highlight bash
# --- отображаем заголовок файла
head /some/file.txt
# первые N строк файла
head -N /some/file.txt
# --- отображаем хвост файла
tail /some/file.txt
# крайние N строк файла
tail -N /some/file.txt
# --- отображение файла с номерами строк
nl /some/file.txt
# ---- отображение файла с разбиением на страницы
more /some/file.txt
# --- кодируем FILANEM из кодировки WINDOWS-1251 в UTF-8
iconv -f WINDOWS-1251 -t UTF-8 FILENAME
# --- Конкатенация файлов
# добавление вывода cat в файл all.txt
cat *.txt >> all.txt
# перезапись файла all.txt выводом cat
cat *.txt > all.txt
# --- замена всех вхождений в файле и запись результата в отдельный файл
sed s/mysql/MySQL/g /some/file.txt > file2.txt
}}}