Bash-скрипты

Найти каталоги, где хранятся JPG картинки

Если необходимо найти не сами картинки, а каталоги, где они лежат. Полезно при изучении флешки с телефона, например:

find-dirs-jpg.sh
find -name '*.jpg' -print0 | xargs -0 dirname | sort | uniq

Удаление всех логов старше 30 дней

log-cleaner.sh
find /path-to-logs -type f -mtime +30 -print0 | xargs -0 rm -f

Разбить файлы по количеству строк кода на архивы

Скрипт ищет файлы в каталоге htdocs, проверяет количество строк в них и разбивает на архивы так, чтобы суммарное количество строк в файлах архива не превышало определенное значение. На выходе - несколько архивов типа part-0.zip, part-1.zip, ...

split-kloc.sh
#!/bin/bash
 
TOTAL_LINE_NUMBER=0
LINE_NUMBER_LIMIT=400000
ARCH_NUMBER=0
 
find htdocs -type f -name '*.php' -print0 | while read -d $'\0' FILE; do
  LINE_NUMBER=`cat "$FILE" | wc -l`
  if [[ "$((TOTAL_LINE_NUMBER + LINE_NUMBER))" -lt "$LINE_NUMBER_LIMIT" ]]; then
    # продолжаем писать
    TOTAL_LINE_NUMBER=$((TOTAL_LINE_NUMBER + LINE_NUMBER))
  else
    # новый архив
    TOTAL_LINE_NUMBER=$LINE_NUMBER
    ARCH_NUMBER=$((ARCH_NUMBER + 1))
  fi
 
  zip part-$ARCH_NUMBER.zip -0 "$FILE"
 
done

Вырезание миниатюры лица с фотографии

face-crop.sh
#!/bin/bash
 
file=$1
name=$(basename "$file")
ratio=30
 
facedetect -o "test.jpg" "$file" --best | while read x y w h; do
  let x1=$x-$w*$ratio/100
  let y1=$y-$h*$ratio/100
  let w1=$w+$w*$ratio*2/100
  let h1=$h+$h*$ratio*2/100
  # convert "$file" -crop ${w}x${h}+${x}+${y} "${name}_face.jpg"
  convert "$file" -crop ${w1}x${h1}+${x1}+${y1} -resize 60x60 "${name}_big.jpg"
  break
done