Exclua todos, exceto os 4 diretórios mais recentes
Pergunta
Quero excluir todos, exceto os quatro diretórios mais recentes do meu diretório pai.Como você faria isso no Bash?
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