sexta-feira, abril 24, 2015

How to delete million of files on busy Linux servers (rm -f *: Argument list too long)

How to delete million of files on busy Linux servers (rm -f *: Argument list too long)

How to Delete million or many thousands of files in the same directory on GNU / Linux and FreeBSD
If you try to delete more than 131072 of files on Linux with rm -f *, where the files are all stored in the same directory, you will get an error:
/bin/rm: Argument list too long.
I've earlier blogged on deleting multiple files on Linux and FreeBSD and this is not my first time facing this error.
Anyways, as time passed, I've found few other new ways to delete large multitudes of files from a server.
In this article, I will explain shortly few approaches to delete few million of obsolete files to clean some space on your server.
Here are 3 methods to use to clean your tons of junk files.
1. Using Linux find command to wipe out millions of files
a.) Finding and deleting files using find's -exec switch:
# find . -type f -exec rm -fv {} \;
This method works fine but it has 1 downside, file deletion is too slow as for each found file external rm command is invoked.
For half a million of files or more, using this method will take "long". However from a server hard disk stressing point of view it is not so bad as, the files deletion is not putting too much strain on the server hard disk.
b.) Finding and deleting big number of files with find's -delete argument:
Luckily, there is a better way to delete the files, by using find's command embedded -delete argument:
# find . -type f -print -delete
c.) Deleting and printing out deleted files with find's -print arg
If you would like to output on your terminal, what files find is deleting in "real time" add -print:
# find . -type f -print -delete
To prevent your server hard disk from being stressed and hence save your self from server normal operation "outages", it is good to combine find command with ionice, e.g.:
# ionice -c 3 find . -type f -print -delete
Just note, that ionice cannot guarantee find's opeartions will not affect severely hard disk i/o requests. On  heavily busy servers with high amounts of disk i/o writes still applying the ionice will not prevent the server from being hanged! Be sure to always keep an eye on the server, while deleting the files nomatter with or without ionice. if throughout find execution, the server gets lagged in serving its ordinary client requests or whatever, stop the execution of the cmd immediately by killing it from another ssh session or tty (if physically on the server).
2. Using a simple bash loop with rm command to delete "tons" of files
An alternative way is to use a bash loop, to print each of the files in the directory and issue /bin/rm on each of the loop elements (files) like so:
for i in *; do
rm -f $i;
If you'd like to print what you will be deleting add an echo to the loop:
# for i in $(echo *); do \
echo "Deleting : $i"; rm -f $i; \
The bash loop, worked like a charm in my case so I really warmly recommend this method, whenever you need to delete more than 500 000+ files in a directory.
3. Deleting multiple files with perl
Deleting multiple files with perl is not a bad idea at all.
Here is a perl one liner, to delete all files contained within a directory:
# perl -e 'for(<*>){((stat)[9]<(unlink))}'
Using perl interpreter to delete thousand of files is quick, really, really quick.
I did not benchmark it on the server, how quick exactly is it, but I guess the delete rate should be similar to find command. Its possible even in some cases the perl loop is  quicker …
4. Using PHP script to delete a multiple files
Using a short php script to delete files file by file in a loop similar to above bash script is another option.
To do deletion  with PHP, use this little PHP script:
$dir = "/path/to/dir/with/files";
$dh = opendir( $dir);
$i = 0;
while (($file = readdir($dh)) !== false) {
$file = "$dir/$file";
if (is_file( $file)) {
unlink( $file);
if (!(++$i % 1000)) {
echo "$i files removed\n";
As you see the script reads the $dir defined directory and loops through it, opening file by file and doing a delete for each of its loop elements.
You should already know PHP is slow, so this method is only useful if you have to delete many thousands of files on a shared hosting server with no (ssh) shell access.
This php script is taken from Steve Kamerman's blog . I would like also to express my big gratitude to Steve for writting such a wonderful post. His post actually become  inspiration for this article to become reality.
To use it rename delete_millioon_of_files_in_a_dir.php.txt todelete_millioon_of_files_in_a_dir.php and run it through a browser .
Note that you might need to run it multiple times, cause many shared hosting servers are configured to exit a php script which keeps running for too long.
Alternatively the script can be run through shell with PHP cli:
php -l delete_millioon_of_files_in_a_dir.php.txt.
5. So What is the "best" way to delete million of files on Linux?
In order to find out which method is quicker in terms of execution time I did a home brew benchmarking on my thinkpad notebook.
a) Creating 509072 of sample files.
Again, I used bash loop to create many thousands of files in order to benchmark.
I didn't wanted to put this load on a productive server and hence I used my own notebook to conduct the benchmarks. As my notebook is not a server the benchmarks might be partially incorrect, however I believe still .they're pretty good indicator on which deletion method would be better.
hipo@noah:~$ mkdir /tmp/test
hipo@noah:~$ cd /tmp/test;
hiponoah:/tmp/test$ for i in $(seq 1 509072); do echo aaaa >> $i.txt; done 
I had to wait few minutes until I have at hand 509072  of files created. Each of the files as you can read is containing the sample "aaaa" string.
b) Calculating the number of files in the directory
Once the command was completed to make sure all the 509072 were existing, I used a find + wc cmd to calculate the directory contained number of files:
hipo@noah:/tmp/test$ find . -maxdepth 1 -type f |wc -l

real 0m1.886s
user 0m0.440s
sys 0m1.332s
Its intesrsting, using an ls command to calculate the files is less efficient than using find:
hipo@noah:/tmp/test$ time ls -1 |wc -l

real 0m3.355s
user 0m2.696s
sys 0m0.528s
c) benchmarking the different file deleting methods with time
– Testing delete speed of find
hipo@noah:/tmp/test$ time find . -maxdepth 1 -type f -delete
real 15m40.853s
user 0m0.908s
sys 0m22.357s
You see, using find to delete the files is not either too slow nor light quick.
- How fast is perl loop in multitude file deletion ?
hipo@noah:/tmp/test$ time perl -e 'for(<*>){((stat)[9]<(unlink))}'real 6m24.669suser 0m2.980ssys 0m22.673s
Deleting my sample 509072 took 6 mins and 24 secs. This is about 3 times faster than find! GO-GO perl :)
As you can see from the results, perl is a great and time saving, way to delete 500 000 files.
- The approximate speed deletion rate of of for + rm bash loop
hipo@noah:/tmp/test$ time for i in *; do rm -f $i; done
real 206m15.081s
user 2m38.954s
sys 195m38.182s
You see the execution took 195m en 38 secs = 3 HOURS and 43 MINUTES!!!! This is extremely slow ! But works like a charm as the running of deletion didn't impacted my normal laptop browsing. While the script was running I was mostly browsing through few not so heavy (non flash) websites and doing some other stuff in gnome-terminal) :)
As you can imagine running a bash loop is a bit CPU intensive, but puts less stress on the hard disk read/write operations. Therefore its clear using it is always a good practice when deletion of many files on a dedi servers is required.

b) my production server file deleting experience

On a production server I only tested two of all the listed methods to delete my files. The production server, where I tested is running Debian GNU / Linux Squeeze 6.0.3. There I had a task to delete few million of files.
The tested methods tried on the server were:
- The find . type -f -delete method.
- for i in *; do rm -f $i; done
The results from using find -delete method was quite sad, as the server almost hanged under the heavy hard disk load the command produced.
With the for script all went smoothly. The files were deleted for a long long time (like few hours), but while it was running, the server continued with no interruptions..
While the bash loop was running, the server load avarage kept at steady 4
Taking my experience in mind, If you're running a production, server and you're still wondering which delete method to use to wipe some multitude of files, I would recommend you go  the bash for loop + /bin/rm way. Yes, it is extremely slow, expect it run for some half an hour or so but puts not too much extra load on the server..
Using the PHP script will probably be slow and inefficient, if compared to both find and the a bash loop.. I didn't give it a try yet, but suppose it will be either equal in time or at least few times slower than bash.
If you have tried the php script and you have some observations, please drop some comment to tell me how it performs.
To sum it up;
Even though there are "hacks" to clean up some messy parsing directory full of few million of junk files, having such a directory should never exist on the first place.
Frankly, keeping millions of files within the same directory is very stupid idea.
Doing so will have a severe negative impact on a directory listing performance of your filesystem in the long term.
If you know better (more efficient) ways to delete a multitude of files in a dir please share in comments.


quinta-feira, abril 23, 2015

ASICS gt-2170-0193 Depois de 2433.4KM vão para a reforma

Bem Ontem foi dia de meter as ASICS gt-2170-0193 para a reforma

Data de Compra : 28 Agosto 2014
Data de Reforma: 22  Abril 2015
KM Totais           2433.4KM

Quando as comprei eram assim...

Após 2433,4KM estão assim....

Vista de trás


é de referir que com elas fiz provas de trail até a mitica prova dos abutres elas me acompanharam alcatrão e muitos kms.

E fica aqui uma foto das que vieram substituir

quarta-feira, abril 22, 2015

1º Meia Maratona de Conímbriga.

Local: Condeixa
Partida e Chegada: Em Locais diferentes Partida junto ao Intermarché de Condeixa
Horário: Partiu-se com uma atraso de cerca de 10 minutos :)
Percurso: Misto (Alcatrão Paralelo e estradão)
Altimetria: 147 metros
Equipa: CNI Running

1--> Terminar   Done \o_
2--> Bater o meu record pessoal que era 1h:32m:45s feito em treinos :) \o_
3--> Fazer um Ritmo médio de 4:00 :( Fiz 4:02
4--> Tentar fazer um ritmo médio abaixo dos 4:00 :(

Fui muito optimista :) nos objectivos


Ritmo por Zonas:



1 km
2 km
3 km
4 km
5 km
6 km
7 km
8 km
9 km
10 km
11 km
12 km
13 km
14 km
15 km
16 km
17 km
18 km
19 km
20 km
21 km
22 km

Primeiros 3 KM a Rolar muito bem ia com o objectivo em acompanhar o grupo da frente os primeiros 5 KM o que não consegui devido a uma dor no gémeo da perna direita, que já a uns dias vinha a marcar presença, embora não sei se não me desse a dor se aguentava o ritmo deles porque foi extremamente. Depois disso tentei ir o mais rápido que consegui =).

Fui quase toda a prova a correr ao meu ritmo que dava sozinho o que foi bom. Tive pena de não conseguir impor um ritmo mais forte mas as dores não me deixavam apoiar o pé correctamente para ter uma passada mais "eficiente".

Ainda tive uma feliz surpresa ficamos em 2 lugar por Equipas :)

Tive o gosto de ir receber a taça em nome da equipa :)

Conclusão: Foi uma prova dura mas que deu luta terminar. Só aquela passagem quase na meta e ups ainda faltam 2 KM +- para terminar :) aiiiii que só apetecia fazer um corta mato hihihih.
E foi bom correr com tantos Amigos e conhecidos nesta prova.

Haaaaaaaaaaaaaaaaaaa é de louvar existirem gomas no final da prova :) adorei a ideia =)

quinta-feira, abril 16, 2015

PRIMAVERA lança software gratuito para setores do Retalho e Restauração

Em mais uma ação ousada,  a PrimaveraBSS disponibiliza a partir de hoje no mercado português uma versão gratuita das aplicações Pssst! para o setor da Restauração e Tlim para o setor Retalho.

Limitações das versões Express do Pssst! e Tlim:
  • Limite no volume de faturação de 40 mil Eur/ano.
  • Limitado a 1 posto e 2 utilizadores.
  • Não existe integração com o ERP Primavera nem com o Pssst! Experience e Pssst! Mobile.
  • Estas versões não permitem acesso ao PRIMAVERA’Space.

Ambas as aplicações estão disponíveis para os sistemas operativos Windows e Linux, e estão direcionadas para as microempresas. O Pssst! e o Tlim são certificados pela Autoridade Tributária (AT), e cumprem com todos os normativos legais em vigor no nosso país. Estão ainda adaptadas e disponíveis para outros países, com os seguintes limites ao nível do volume de faturação:
  • Países situados na Europa: 40.000 Eur
  • Angola: 7.000.000 Kz
  • Moçambique: 1.500.000 Mt
  • Cabo Verde: 3.500.000 Cve

Ao contrário do Primavera Express, o download da aplicação não está disponível no site. É necessário preencher um formulário e posteriormente aguardar um contacto por parte de um Parceiro Primavera.


Comunicado da Primavera:

A PRIMAVERA BSS disponibiliza a partir de hoje no mercado português duas soluções gratuitas de gestão de vendas ao balcão (POS). O Pssst! Express e o Tlim Express destinam-se aos setores da Restauração e Retalho, respetivamente, duas áreas de atividade cujo tecido empresarial é maioritariamente constituído por micro e pequenas empresas.
Estas soluções de gestão estão certificadas pela Autoridade Tributária e Aduaneira (AT), permitindo aos pequenos empresários do Retalho e Restauração, com faturação até 40 mil euros ano, gerir os seus estabelecimentos de forma simples e intuitiva, acedendo sem custos a soluções inovadoras que permitem modernizar o serviço ao cliente e aumentar a produtividade, dando resposta simultaneamente a todas as obrigações legais e fiscais.
Segundo o CO-CEO da PRIMAVERA BSS, José Dionísio, esta medida terá um grande impacto nestes dois setores. O responsável justifica "segundo dados do INE, no setor da Restauração e Bebidas mais de 96% das empresas em atividade (cerca de 73 mil) são micro negócios, muitos deles, com sérias dificuldades de manutenção da atividade. Face a este cenário, quisemos dar o nosso contributo, disponibilizando um software gratuito que permite reduzir os custos de atividade”.
"Com esta medida pretendemos apoiar não só os empreendedores que estão a iniciar atividade -cerca de 30 mil todos os anos, segundo o INE-, como aqueles que já estão estabelecidos, mas procuram reduzir custos operacionais para dessa forma solidificar o negócio”, salienta o responsável.

Soluções gratuitas da PRIMAVERA existem desde 2006
Em 2006 a PRIMAVERA BSS foi a primeira software house a disponibilizar uma solução de gestão completamente gratuita, de uma marca reconhecida – o PRIMAVERA Express. Este software sem custos tem sido utilizado, desde então e até aos dias de hoje, por milhares de pequenas empresas portuguesas, maioritariamente do setor dos Serviços, que faturam até 30 mil Euros anuais.
O sucesso do PRIMAVERA Express motivou esta decisão da fabricante de alargar a gama Express (gratuita) aos setores do Retalho e Restauração, disponibilizando um software totalmente adaptado às necessidades de gestão de Pontos de Venda, o primeiro de marca reconhecida e totalmente livre disponibilizado no mercado português.

Sobre as novas soluções Pssst! Express e Tlim Express
As soluções Pssst! Express e Tlim Express disponibilizam um leque alargado de funcionalidades que potenciam a produtividade dos pontos de venda, através do acesso rápido e facilitado às principais operações diárias, proporcionando um controlo transversal do negócio: gestão de caixa, gestão de pedidos, controlo de stocks, gestão de contas correntes, fidelização de cientes e relatórios de gestão que permitem acompanhar a evolução do negócio.


Treino na Pista de Tartan

Bem vou tentar postar por aqui os meus treinos que vou fazendo :)


O que consegui fazer:

Bem nota-se que ainda não consigo "rular" estável a 3:20.

Isto deu uns parciais

100 200 400m 800m
Pace Time Pace Time Pace Time Pace Time
2:28/km 12s 3:23/km 39s 3:29/km 01:24 3:30/km 02:58
2:53/km 14s 3:23/km 39s 3:37/km 01:27 3:43/km 03:09
3:30/km 17s 3:28/km 40s 3:42/km 01:29 3:46/km 03:12
3:30/km 17s 3:28/km 40s 3:47/km 01:31 3:47/km 03:13
3:42/km 18s 3:43/km 43s 3:49/km 01:32 3:56/km 03:20
3:42/km 18s 3:49/km 44s 3:52/km 01:33 3:57/km 03:21
3:42/km 18s 3:54/km 45s 3:52/km 01:33 3:57/km 03:21
3:55/km 19s 3:54/km 45s 3:52/km 01:33 4:01/km 03:25
3:55/km 19s 3:59/km 46s 3:57/km 01:35 4:20/km 03:41
4:20/km 21s 3:59/km 46s 4:12/km 01:41 4:43/km 04:00
4:20/km 21s 4:04/km 47s 4:14/km 01:42

4:32/km 22s 4:04/km 47s 4:17/km 01:43

4:32/km 22s 4:04/km 47s 4:22/km 01:45

4:32/km 22s 4:09/km 48s 4:27/km 01:47

4:32/km 22s 4:15/km 49s 4:32/km 01:49

4:44/km 23s 4:20/km 50s 4:39/km 01:52

4:44/km 23s 4:25/km 51s 4:44/km 01:54

4:44/km 23s 4:51/km 56s 4:54/km 01:58

5:21/km 26s 4:56/km 57s 5:04/km 02:02

5:58/km 29s 5:22/km
6:27/km 02:35

Deu um record pessoal a fazer 100m a 12 segundos =) num segmento :)

Bem a nível de ritmos deu este lindo gráfico.

Fiz 2:22 a Vo2 Max e ainda ter conseguido fazer mais 9:21 abaixo desse ritmo em Z6 o que totaliza um total 11:42 Minutos a dar o máximo.

este treino foi feito no centro de estágios do luso na pista de tartan na companhia do Tiago, Mário , Miguel , Pimenta e joaquim

Link para


Related Posts Widget for Blogs by LinkWithin