LINUX.ORG.RU

История изменений

Исправление megabaks, (текущая версия) :

что не хочу, чтобы удалялось:
vmlinuz-2.6.32-openvz-044.11-el6-gentoo-slep-1-gcbd8877 vmlinuz-3.2.9-gentoo+ 2.6.39-gentoo-r2

#!/bin/bash

SRC="/usr/src/linux"
KERNELS="$(file /boot/* | grep "Linux.*version")"

############################################################################
####### kernel path and real name ##########################################
kernel_version() {
makefile="${SRC}-${1}/Makefile"
  if [ -f "${makefile}" ];then
	VERSION="$(awk '/^VERSION =/ {print $3}' "${makefile}")"
	PATCHLEVEL="$(awk '/^PATCHLEVEL =/ {print $3}' "${makefile}")"
	SUBLEVEL="$(awk '/^SUBLEVEL =/ {print $3}' "${makefile}")"
	EXTRAVERSION="$(awk '/^EXTRAVERSION =/ {print $3}' "${makefile}")"
	FULL_KERNEL="${VERSION}.${PATCHLEVEL}.${SUBLEVEL}${EXTRAVERSION}"
  fi
}

true_kernel() {
  if [ -n "${1}" ];then
	KERNEL="${1##*linux-}"
	KERNEL="${KERNEL%/}"
  fi

  if [ -d "${SRC}-${KERNEL}" ];then
	kernel_version ${KERNEL}
  else
	for kernel in `ls -d --color=never /usr/src/linux-*`;do
	  kernel="${kernel##*/linux-}"
	  kernel_version ${kernel}
	  if [ "${KERNEL}" == "${FULL_KERNEL}" ];then
		KERNEL="${kernel}"
		break
	  fi
	done
  fi
}
############################################################################

while read line;do
  FILE="`awk '{print $1}' <<< "${line}"`"
  FILE="${FILE%:}"
  version="`awk '{print $9}' <<< "${line}"`"
  true_kernel ${version}

  if ! [ -f "${SRC}-${KERNEL}/Makefile" ] && ! [ -d "/lib/modules/${version}" ];then
	REMOVE_FILES+="${FILE}\n"
  fi

done <<< "${KERNELS}"

VERSIONS="$(awk '{print $9}' <<< "${KERNELS}")"
for mod_dir in `ls -1 --color=never /lib/modules/ | grep -v "${VERSIONS}"`;do
  REMOVE_MOD_DIRS+="/lib/modules/${mod_dir}\n"
done

for src_dir in `ls -d1 --color=never ${SRC}*`;do
  [ -f "${src_dir}/Makefile" ] || REMOVE_DIRS+="${src_dir}\n"
done

for ignor in ${IGNOR};do
  echo "Игнорируется: ${ignor}"
  REMOVE_FILES="${REMOVE_FILES//"${ignor}"/}"
  REMOVE_DIRS="${REMOVE_DIRS//"${ignor}"/}"
  REMOVE_MOD_DIRS="${REMOVE_MOD_DIRS//"${ignor}"/}"
done

echo -e "\nБудут удалены следующие файлы:\n"
echo -e "${REMOVE_FILES}" | sort -u | sed '/^$/d'

echo -e "\nБудут удалены следующие диры:\n"
echo -e "${REMOVE_DIRS}" | sort -u | sed '/^$/d'
echo -e "${REMOVE_MOD_DIRS}" | sort -u | sed '/^$/d'
IGNOR="/lib/modules/3.2.1-ololo /boot/3.4.3-pf-uksm /boot/3.2.1-r2-pf" sh kernel-cleaner/kernel-cleaner
Игнорируется: /lib/modules/3.2.1-ololo
Игнорируется: /boot/3.4.3-pf-uksm
Игнорируется: /boot/3.2.1-r2-pf

Будут удалены следующие файлы:

/boot/3.1.5-pf
/boot/3.1.5-pf1
/boot/3.1.6-pf
/boot/3.2.1-pf
/boot/3.2.4-pf
/boot/3.2.7-pf
/boot/3.3.2-pf
/boot/3.3.6-pf
/boot/3.4.3-pf
/boot/3.4.5-pf-uksm

Будут удалены следующие диры:

/usr/src/linux-2.2.2-ololo
/usr/src/linux-3.3.6-pf
/lib/modules/3.2.1-trololo

попробуй на всякий случай

Исходная версия megabaks, :

что не хочу, чтобы удалялось:
vmlinuz-2.6.32-openvz-044.11-el6-gentoo-slep-1-gcbd8877 vmlinuz-3.2.9-gentoo+ 2.6.39-gentoo-r2

#!/bin/bash

SRC="/usr/src/linux"
KERNELS="$(file /boot/* | grep "Linux.*version")"

############################################################################
####### kernel path and real name ##########################################
kernel_version() {
makefile="${SRC}-${1}/Makefile"
  if [ -f "${makefile}" ];then
	VERSION="$(awk '/^VERSION =/ {print $3}' "${makefile}")"
	PATCHLEVEL="$(awk '/^PATCHLEVEL =/ {print $3}' "${makefile}")"
	SUBLEVEL="$(awk '/^SUBLEVEL =/ {print $3}' "${makefile}")"
	EXTRAVERSION="$(awk '/^EXTRAVERSION =/ {print $3}' "${makefile}")"
	FULL_KERNEL="${VERSION}.${PATCHLEVEL}.${SUBLEVEL}${EXTRAVERSION}"
  fi
}

true_kernel() {
  if [ -n "${1}" ];then
	KERNEL="${1##*linux-}"
	KERNEL="${KERNEL%/}"
  fi

  if [ -d "${SRC}-${KERNEL}" ];then
	kernel_version ${KERNEL}
  else
	for kernel in `ls -d --color=never /usr/src/linux-*`;do
	  kernel="${kernel##*/linux-}"
	  kernel_version ${kernel}
	  if [ "${KERNEL}" == "${FULL_KERNEL}" ];then
		KERNEL="${kernel}"
		break
	  fi
	done
  fi
}
############################################################################

while read line;do
  FILE="`awk '{print $1}' <<< "${line}"`"
  FILE="${FILE%:}"
  version="`awk '{print $9}' <<< "${line}"`"
  true_kernel ${version}

  if ! [ -f "${SRC}-${KERNEL}/Makefile" ] && ! [ -d "/lib/modules/${version}" ];then
	REMOVE_FILES+="${FILE}\n"
  fi

done <<< "${KERNELS}"

VERSIONS="$(awk '{print $9}' <<< "${KERNELS}")"
for mod_dir in `ls -1 --color=never /lib/modules/ | grep -v "${VERSIONS}"`;do
  REMOVE_MOD_DIRS+="/lib/modules/${mod_dir}\n"
done

for src_dir in `ls -d1 --color=never ${SRC}*`;do
  [ -f "${src_dir}/Makefile" ] || REMOVE_DIRS+="${src_dir}\n"
done

for ignor in ${IGNOR};do
  echo "Игнорируется: ${ignor}"
  REMOVE_FILES="${REMOVE_FILES//"${ignor}"/}"
  REMOVE_DIRS="${REMOVE_DIRS//"${ignor}"/}"
  REMOVE_MOD_DIRS="${REMOVE_MOD_DIRS//"${ignor}"/}"
done

echo -e "\nБудут удалены следующие файлы:\n"
echo -e "${REMOVE_FILES}" | sort -u | sed '/^$/d'

echo -e "\nБудут удалены следующие диры:\n"
echo -e "${REMOVE_DIRS}" | sort -u | sed '/^$/d'
echo -e "${REMOVE_MOD_DIRS}" | sort -u | sed '/^$/d'

#rm -r ${REMOVE_MOD_DIRS//\\n/ }
IGNOR="/lib/modules/3.2.1-ololo /boot/3.4.3-pf-uksm /boot/3.2.1-r2-pf" sh kernel-cleaner/kernel-cleaner
Игнорируется: /lib/modules/3.2.1-ololo
Игнорируется: /boot/3.4.3-pf-uksm
Игнорируется: /boot/3.2.1-r2-pf

Будут удалены следующие файлы:

/boot/3.1.5-pf
/boot/3.1.5-pf1
/boot/3.1.6-pf
/boot/3.2.1-pf
/boot/3.2.4-pf
/boot/3.2.7-pf
/boot/3.3.2-pf
/boot/3.3.6-pf
/boot/3.4.3-pf
/boot/3.4.5-pf-uksm

Будут удалены следующие диры:

/usr/src/linux-2.2.2-ololo
/usr/src/linux-3.3.6-pf
/lib/modules/3.2.1-trololo

попробуй на всякий случай