Pergunta

Quero excluir todos, exceto os quatro diretórios mais recentes do meu diretório pai.Como você faria isso no Bash?

Foi útil?

Solução

ls -atrd */ | head --lines=-4 | xargs rm -rf

Editar: adicionou 'um' argumento a ls

Outras dicas

Por favor, esclareça se você quer dizer “excluir todos os diretórios, exceto os quatro mais novos” ou “excluir tudo (arquivos e diretórios), exceto os quatro diretórios mais recentes”.

Observe também que os tempos de criação não são conhecidos para diretórios.Só é possível saber quando um diretório foi modificado pela última vez, ou seja, teve arquivos adicionados, removidos ou renomeados.

você poderia fazer o seguinte:

#!/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

(remova o # antes de rm para que isso realmente aconteça;))

Outra maneira de fazer isso, segura para BSD, com arrays (por que não?)

#!/bin/bash
ARRAY=( `ls -td */` )
ELEMENTS=${#ARRAY[@]}
COUNTER=4
while [ $COUNTER -lt $ELEMENTS ]; do
  echo ${ARRAY[${COUNTER}]}
  let COUNTER=COUNTER+1
done
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top