Diferencia entre revisiones de «Quita version anterior»

De FJWiki
Saltar a: navegación, buscar
 
(No se muestra una edición intermedia del mismo usuario)
Línea 1: Línea 1:
Este script sirve para borrar las versiones anteriores que haya de archivos rpms en directorios como /var/spool/up2date.
+
Este script sirve para borrar las versiones anteriores que haya de archivos rpms en directorios como <tt>/var/spool/up2date</tt>.
 +
 
 +
El script debe ejecutarse situado en el directorio que se quiere limpiar.
  
 
== quita_version_anterior ==
 
== quita_version_anterior ==
Línea 18: Línea 20:
 
done
 
done
 
</source>
 
</source>
 +
 +
 +
== quita_version_anterior2 ==
 +
 +
El código anterior tenía el problema de ser sólo para rpms. Después de ver que los archivos hdr también son un problema, es mejor tener una versión más flexible.
 +
 +
Uso:
 +
<source>
 +
quita_version_anterior2 [rpm|hdr|..]
 +
</source>
 +
 +
=== Código fuente ===
 +
<source lang="bash">
 +
#!/bin/bash
 +
 +
extension=$1
 +
 +
if [ -z "$1" ]; then
 +
        extension=rpm
 +
fi
 +
 +
lista=`ls *.$extension | sed -e "{s/-[0-9].\+$//gi}" | sort -u`
 +
 +
for i in $lista; do
 +
        borrar=`ls -r -v $i*.$extension | egrep "^${i}-[0-9].+$" | tail -n+2 `
 +
        if [ -n "$borrar" ]; then
 +
                echo Borraremos de $i :
 +
                echo $borrar
 +
                rm -f $borrar
 +
                echo
 +
        fi
 +
done
 +
</source>
 +
 +
== quita_version_anterior2B ==
 +
 +
Si la cantidad de archivos es muy grande (>13000? Ok, no es por cantidad de archivos, sino por cuántos caracteres tienen estos nombres en total, un ''bash normal'' suele estar configurado para aguantar 128k, se puede ejecutar <tt>getconf ARG_MAX</tt> para verificar el límite), <tt>ls</tt> no puede manejarla (como se explicó antes, en verdad es culpa de <tt>bash</tt>). Para esto la siguiente versión, cuyo uso es el mismo que el de [[#quita_version_anterior2|quita_version_anterior2]].
 +
 +
=== Código fuente ===
 +
<source lang="bash">
 +
#!/bin/bash
 +
 +
extension=$1
 +
 +
if [ -z "$1" ]; then
 +
        extension=rpm
 +
fi
 +
 +
lista=`ls | egrep \.$extension$ | sed -e "{s/-[0-9].\+$//gi}" | sort -u`
 +
 +
for i in $lista; do
 +
        borrar=`ls -r -v $i*.$extension | egrep "^${i}-[0-9].+$" | tail -n+2 `
 +
        if [ -n "$borrar" ]; then
 +
                echo Borraremos de $i :
 +
                echo $borrar
 +
                rm -f $borrar
 +
                echo
 +
        fi
 +
done
 +
</source>
 +
 +
== quita_version_anterior3 ==
 +
 +
Esta versión es recursiva y recibe como parámetro el directorio sobre el cuál se va hacer la limpieza (si se usa sin parámetros asume /var/cache/yum). Esta versión hecha por Gustavo Higa basada en [[#quita_version_anterior2B|quita_version_anterior2B]]
 +
 +
=== Código fuente ===
 +
<source lang="bash">
 +
#!/bin/bash
 +
 +
function quitaVersion(){
 +
extension=$1
 +
cd $2
 +
if [ -z "$1" ]; then
 +
        extension=rpm
 +
fi
 +
arqui=$3
 +
 +
lista=`ls | egrep \.$arqui\.$extension$ | sed -e "{s/-[0-9].\+$//gi}" | sort -u`
 +
 +
for i in $lista; do
 +
        borrar=`ls -r -v $i*.$arqui.$extension | egrep "^${i}-[0-9].+$" | tail -n+2 `
 +
        if [ -n "$borrar" ]; then
 +
                echo Borraremos de $i :
 +
                echo $borrar
 +
                rm -f $borrar
 +
                echo
 +
        fi
 +
done
 +
 +
}
 +
 +
ROOT_PATH="/var/cache/yum"
 +
if [ -n "$1" ]; then
 +
ROOT_PATH="$1"
 +
fi
 +
 +
pathList=`find $ROOT_PATH -type d`
 +
 +
extensionList="rpm hdr"
 +
arquiList="noarch i386 i586 i686 x86_64"
 +
 +
for pathItem in $pathList; do
 +
for extensionItem in $extensionList; do
 +
for arquiItem in $arquiList; do
 +
echo Entrando a borrar $extensionItem de $pathItem y arquitectura $arquiItem
 +
quitaVersion $extensionItem $pathItem $arquiItem
 +
done
 +
done
 +
done
 +
</source>
 +
  
 
[[Category:Bash_Scripts]]
 
[[Category:Bash_Scripts]]

Revisión actual del 01:46 27 ene 2009

Este script sirve para borrar las versiones anteriores que haya de archivos rpms en directorios como /var/spool/up2date.

El script debe ejecutarse situado en el directorio que se quiere limpiar.

quita_version_anterior

#!/bin/bash

lista=`ls *.rpm | sed -e "{s/-[0-9].\+$//gi}" | sort -u`

for i in $lista; do
        borrar=`ls -r -v $i*.rpm | egrep "^${i}-[0-9].+$" | tail -n+2 `
        if [ -n "$borrar" ]; then
                echo Borraremos de $i :
                echo $borrar
                rm -f $borrar
                echo
        fi
done


quita_version_anterior2

El código anterior tenía el problema de ser sólo para rpms. Después de ver que los archivos hdr también son un problema, es mejor tener una versión más flexible.

Uso:

quita_version_anterior2 [rpm|hdr|..]

Código fuente

#!/bin/bash

extension=$1

if [ -z "$1" ]; then
        extension=rpm
fi

lista=`ls *.$extension | sed -e "{s/-[0-9].\+$//gi}" | sort -u`

for i in $lista; do
        borrar=`ls -r -v $i*.$extension | egrep "^${i}-[0-9].+$" | tail -n+2 `
        if [ -n "$borrar" ]; then
                echo Borraremos de $i :
                echo $borrar
                rm -f $borrar
                echo
        fi
done

quita_version_anterior2B

Si la cantidad de archivos es muy grande (>13000? Ok, no es por cantidad de archivos, sino por cuántos caracteres tienen estos nombres en total, un bash normal suele estar configurado para aguantar 128k, se puede ejecutar getconf ARG_MAX para verificar el límite), ls no puede manejarla (como se explicó antes, en verdad es culpa de bash). Para esto la siguiente versión, cuyo uso es el mismo que el de quita_version_anterior2.

Código fuente

#!/bin/bash

extension=$1

if [ -z "$1" ]; then
        extension=rpm
fi

lista=`ls | egrep \.$extension$ | sed -e "{s/-[0-9].\+$//gi}" | sort -u`

for i in $lista; do
        borrar=`ls -r -v $i*.$extension | egrep "^${i}-[0-9].+$" | tail -n+2 `
        if [ -n "$borrar" ]; then
                echo Borraremos de $i :
                echo $borrar
                rm -f $borrar
                echo
        fi
done

quita_version_anterior3

Esta versión es recursiva y recibe como parámetro el directorio sobre el cuál se va hacer la limpieza (si se usa sin parámetros asume /var/cache/yum). Esta versión hecha por Gustavo Higa basada en quita_version_anterior2B

Código fuente

#!/bin/bash
 
function quitaVersion(){
	extension=$1
	cd $2
	if [ -z "$1" ]; then
        	extension=rpm
	fi
	arqui=$3
 
	lista=`ls | egrep \.$arqui\.$extension$ | sed -e "{s/-[0-9].\+$//gi}" | sort -u`
 
	for i in $lista; do
        	borrar=`ls -r -v $i*.$arqui.$extension | egrep "^${i}-[0-9].+$" | tail -n+2 `
	        if [ -n "$borrar" ]; then
        	        echo Borraremos de $i :
        	        echo $borrar
        	        rm -f $borrar
        	        echo
        	fi
	done
 
}
 
ROOT_PATH="/var/cache/yum"
if [ -n "$1" ]; then
	ROOT_PATH="$1"
fi
 
pathList=`find $ROOT_PATH -type d`
 
extensionList="rpm hdr"
arquiList="noarch i386 i586 i686 x86_64"
 
for pathItem in $pathList; do
	for extensionItem in $extensionList; do
		for arquiItem in $arquiList; do
			echo Entrando a borrar $extensionItem de $pathItem y arquitectura $arquiItem
			quitaVersion $extensionItem $pathItem $arquiItem
		done
	done
done