Mantenha um número fixo de arquivos em um diretório

0

Nós temos um diretório Linux onde arquivos e diretórios são adicionados diariamente.

Gostamos de controlar essa lista de arquivos e subdiretórios no diretório, fixando a lista em 50 arquivos e diretórios mais recentes a qualquer momento.

Como escrevemos um roteiro para atingir esse objetivo?

    
por chz 03.04.2013 / 11:14

2 respostas

0

Com o GNU find e sort , você obtém os 50 arquivos mais recentes e seu registro de data e hora do diretório atual:

find . -mindepth 1 -maxdepth 1 -printf '%T@ %p\n' | sort -n | tail -n 50

Canalize-os em while read para obter cada nome de arquivo:

find . -mindepth 1 -maxdepth 1 -printf '%T@ %p\n' |
sort -n | tail -n 50 |
while read -r ts file; do echo rm -rf -- "$file"; done

Aqui, printf exibe um registro de data e hora classificável, que o% numéricosort usará. Obtemos os 50 arquivos ou diretórios mais antigos e removemos cada um individualmente. Remova o echo no script para realmente executar os comandos.

Observe que isso não funciona se seus arquivos / diretórios contiverem uma nova linha em seu nome. Isso não acontece com frequência, mas tenha cuidado para verificar. Devido à natureza de read , também não funcionará se houver espaços iniciais ou finais.

Para mais algumas ideias, consulte: BashFAQ / 003 - Como posso encontrar o arquivo mais recente (mais antigo, mais antigo) em um diretório?

    
por 23.12.2013 / 17:18
-3

Se você precisa olhar apenas para os dirs na pasta (não para subdir), então execute o script:

#!/bin/bash
l=$(ls |wc -l)
n=$[$l-50]
rm -rf 'ls -1t|tail -$n'
    
por 23.12.2013 / 15:52