Que comando Unix posso usar para impor um limite de 100 arquivos em uma pasta?

3

Eu gostaria de excluir os arquivos mais antigos em um diretório, após um limite de 100 arquivos. Em outras palavras, quero garantir que não haja mais de 100 arquivos no diretório e, se um limite for excedido, exclua os arquivos mais antigos após o limite. Eu não quero apenas excluir arquivos com mais de x dias, já que se isso fosse executado em um cronjob, eventualmente todos os arquivos seriam excluídos.

Acho que se eu programasse isso, o pseudo código seria:

list = dir.getFiles()
list.sortByDate()
deleteList = list.getSubList(100, end) // from, to
deleteAll(deleteList)

Então, qual seria o comando Unix apropriado? Acho que find estaria envolvido de alguma forma com o argumento -exec , mas não tenho certeza sobre o aspecto de classificação / limitação.

    
por Nick Bolton 29.08.2010 / 17:13

2 respostas

5

find não deve ser necessário. Se você primeiro vai para a direita,

rm -f 'ls -rt | head -n -100'

para especificar um caminho

rm -f 'ls -rt /path/to/my/dir | head -n -100'

e por cron (no Ubuntu!)

/bin/rm -f '/bin/ls -rt /path/to/my/dir | /usr/bin/head -n -100'

Um caminho de comando pode ser determinado usando which , por exemplo

which ls

Por fim, se os nomes dos arquivos contiverem espaços, eles deverão ser citados como ls -Q e enviados para xargs

/bin/ls -Qrt /path/to/my/dir | /usr/bin/head -n -100 | /usr/bin/xargs /bin/rm -f

(testado no Ubuntu, para seus testes, substitua rm -f por echo para ver o que deve ser excluído)

    
por 29.08.2010 / 17:22
0

Você está reinventando a roda chamada rotação de log? Em caso afirmativo, use logrotate (em sistemas linux; outros sistemas terão seus próprios programas equivalentes).

    
por 30.08.2010 / 09:33