Eliminar a todos menos a los 4 más recientes de directorios
Pregunta
Quiero borrar todos pero los 4 más recientes de directorios en mi directorio padre.¿Cómo se puede hacer esto en Bash?
Solución
ls -atrd */ | head --lines=-4 | xargs rm -rf
Editar: añadido 'un' argumento a ls
Otros consejos
Por favor aclarar si se refiere a "eliminar todos los directorios, pero los cuatro newst queridos" o "borrar todo (archivos y directorios), excepto para los cuatro más recientes de directorios".
Por favor, también tenga en cuenta que la creación veces no son conocidos por los directorios.Uno sólo puede decir cuando un directorio fue modificada por última vez, es decir, archivos de agregado, eliminado o cambiado de nombre.
se podría hacer lo siguiente:
#!/bin/bash
#store the listing of current directory in var
mydir=`ls -t`
it=1
for file in $mydir
do
if [ $it -gt 5 ]
then
echo file $it will be deleted: $file
#rm -rf $file
fi
it=$((it+1))
done
(quitar el # antes de rm para hacer que realmente suceda ;) )
Otro, BSD-seguro, la forma de hacerlo, con matrices (¿por qué no?)
#!/bin/bash
ARRAY=( `ls -td */` )
ELEMENTS=${#ARRAY[@]}
COUNTER=4
while [ $COUNTER -lt $ELEMENTS ]; do
echo ${ARRAY[${COUNTER}]}
let COUNTER=COUNTER+1
done