Pregunta

Quiero borrar todos pero los 4 más recientes de directorios en mi directorio padre.¿Cómo se puede hacer esto en Bash?

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top