Encontre e exclua todos os N maiores arquivos em 100s de diretórios

2

Eu tenho 100 s de diretórios irmãos em um sistema BSD / Unix, cada um com uma coleção de arquivos nele. Eu gostaria de excluir todos, mas os N maiores arquivos em cada diretório. (N é 5 para mim.)

Supondo que eu possa usar alguma mágica 'find' para isso, mas não tenho certeza de como.

    
por Laizer 10.08.2011 / 20:43

1 resposta

4

Tente executar este comando, acho que você vai gostar

find /path/to/dir -type f -print0 | xargs -0 du -s | sort -rn | awk 'NR>5 {print $NF}' | xargs rm -f

Isso imprimirá todos os arquivos abaixo do diretório /path/to/dir , calculará o tamanho de cada arquivo, classificará por tamanho, extrairá os nomes de todos os arquivos (exceto os 5 principais) e passará isso para rm .

Para realizar isso em cada diretório individualmente, é melhor envolvê-lo em um script, como

#!/bin/bash

for DIR in 'find /path -maxdepth 1 -type d'
do
    find ${DIR} -type f -print0 | xargs -0 du -s | sort -rn | awk 'NR>5 {print $NF}' | xargs rm -f
done

Onde /path é o diretório pai que contém todos os seus diretórios irmãos. Isto irá realizar a mesma coisa que @TomNewton descreve executando individualmente o fluxo de trabalho em cada diretório irmão.

    
por 10.08.2011 / 21:08

Tags