Parece que você está procurando por xargs , mas ainda não o conhece.
find /some/log/dir -type f -name "*.log" | xargs rm
Existe uma maneira de limitar o número de resultados retornados pelo comando FIND em um sistema unix? Estamos tendo problemas de desempenho devido a um número excessivamente grande de arquivos em alguns diretórios.
Estou tentando fazer algo como:
find /some/log -type f -name *.log -exec rm {} ; | limit 5000
Parece que você está procurando por xargs , mas ainda não o conhece.
find /some/log/dir -type f -name "*.log" | xargs rm
Você pode tentar algo como find [...] |head -[NUMBER]
. Isso enviará um SIGPIPE
para find
quando head
exibir suas muitas linhas, de forma que find
não continue sua pesquisa.
find /some/log -type f -name *.log -exec rm {} ; | limit 5000
Bem, o comando como citado não funcionará, é claro ( limit
nem é um comando válido).
Mas se você executar algo semelhante ao comando find acima, provavelmente
um problema clássico. Você provavelmente está tendo problemas de desempenho porque find
executa rm
uma vez para cada arquivo .
Você quer usar xargs
, ele pode combinar vários arquivos em uma linha de comando, por isso invocará rm
em um tempo limitado para muitos arquivos de uma só vez, o que é muito mais rápido.
Apenas |head
não funcionou para mim:
root@static2 [/home/dir]# find . -uid 501 -exec ls -l {} \; | head 2>/dev/null
total 620
-rw-r--r-- 1 root root 55 Sep 8 15:22 08E7384AE2.txt
drwxr-xr-x 3 lamav statlus 4096 Apr 22 2015 1701A_new_email
drwxr-xr-x 3 lamav statlus 4096 Apr 22 2015 1701B_new_email
drwxr-xr-x 3 lamav statlus 4096 May 11 2015 1701C_new_email
drwxr-xr-x 2 lamav statlus 4096 Sep 24 18:58 20150924_test
drwxr-xr-x 3 lamav statlus 4096 Jun 4 2013 23141_welcome_newsletter
drwxr-xr-x 3 lamav statlus 4096 Oct 31 2012 23861_welcome_email
drwxr-xr-x 3 lamav statlus 4096 Sep 19 2013 24176_welco
drwxr-xr-x 3 lamav statlus 4096 Jan 11 2013 24290_convel
find: 'ls' terminated by signal 13
find: 'ls' terminated by signal 13
find: 'ls' terminated by signal 13
find: 'ls' terminated by signal 13
find: 'ls' terminated by signal 13
(... etc ...)
Minha (definitivamente não é a melhor) solução:
find . -uid 501 -exec ls -l {} \; 2>/dev/null | head
A desvantagem é que o 'find' em si não é terminado após o número requerido de linhas, e executado em background até ^ C ou end, portanto as idéias são bem-vindas.