Mostrando postagens com marcador xargs. Mostrar todas as postagens
Mostrando postagens com marcador xargs. Mostrar todas as postagens

como copiar uma estrutura de pastas sem os arquivos?


(cd /home/user/source/; find -type d -print0) | xargs -0 mkdir -p


Sobre os erros de português aqui no site agradeço ao Hélio Nunes, estou estudando
inglês para dentro de algum tempo postar nesta lingua, assim vou ter a desculpa se escrever algo errado.

O Hélio Nunes me alertou sobre o erro ao colocar extrutura ao invés de estrutura, confesso que este blog já postou muitos erros de português, e não somente nele, apesar de me considerar rasoavelmente rasoavelmente articulado volta e meia cometo esses erros, não sou assim tão bom na nossa lingua. Mas considerando que mantenho este blog sozinho e por vezes as postagens são rápidas acho que a quantidade de erros é até baixa.

É curioso como no parágrafo acima, ao citar um erro, cometi outro, tento não errar, mas quando erro, gosto de assumir os erros, de aprender com eles. Obrigado a todos que postam críticas, sugestões, incluindo as correções no uso da lingua portuguesa.

função para mostar os maiores arquivos do seu sistema

Coloque no seu ~/bashrc


biggest (){
du -k * | sort -nr | cut -f2 | head -20 | xargs -d "\n" du -sh
}

Obs: Agradecimentos aos membros da lista de shell script do yahoo:
http://br.groups.yahoo.com/group/shell-script/message/29808

Agora vamos explicar o comando procê nun ficar tonto:

du -k ...... exibe em múltiplos de 1000
sort -nr ... ordena numericamente em ordem inversa
cut -f2 ... pega so os nomes
head ...... exibe os 10 maiores
xargs -d "\n" entrega a lista para o xargs indicando quebra de linha como separador
du -sh ..... faz o calculo do tamanho


Outra versão que ainda vou ter que analizar

du | sort -r -n | awk '{split("k m g",v); s=1; while($1>1024){$1/=1024; s++} print int($1)" "v[s]"\t"$2}'


Usando esta segunda versão o resultado deve ser filtrado com "head -valor"

biggest () {
du | sort -r -n | awk '{split("k m g",v); s=1; while($1>1024){$1/=1024; s++} print int($1)" "v[s]"\t"$2}'
}


Referência command-line-fu

Leia todos os posts sobre shell script:
http://vivaotux.blogspot.com/search/label/bash

Find + Xargs de novo!

adicionando extensão a arquivos
Eu tinha um monte de arquivos sem extensão e queria colocar
no final txt, segue a solução.


find ./ -maxdepth 1 -type f -print0 | xargs -0 -i mv ./{} ./{}.txt


A vantagem desta abordagem é que o find entrega uma lista pronta
para o xargs, assim um arquivo já renomeado não pode sofrer novamente
a alteração em questão. Outra vantagem é que fica tudo em uma mísera linha.

Solução usando o rename

rename 's/$/.txt/g' *

O cifrão é uma expressão regular que significa final do padrão buscado!

Como localizar 'arquivos' que não obedeçam a um padrão?

Essa pergunta surge no seguinte contexto:

Você baixou por exemplo a biblioteca de imagens openclipart
que tem uma versão 'full', nesta versão além dos arquivos svg
vem também arquivos 'png', 'txt', 'pdf' entre outros, eu queria
fazer um cd para o Natal Livre 2008 e para diminuir o tamamnho
precisava deixar apenas os arquivso com extensão 'svg', fiz assim:

find ./clipart -type f -iregex '.*\.[^svg]$' | xargs -rm f

O find está buscando na pasta clipart por arquivos
'-type f' que obedeçam à expressão regular '.*\.[^svg]$'

O significado da expressão regular por sua vez é:

.* ......... qualquer caractere em qualquer quantidade
\. ......... seguido de um ponto
[^svg] ..... não seguido de svg (negação)
$ ........... seguido de final de linha

O xargs pega blocos de tamanho aceitáveis para a memória
evitando estouro de pilha e entrega para o comando de remoção
'rm'

A biblioteca openclipart tem muitas subpastas e agora eu
queria saber a quantidade de arquivos únicos

find ./clipart/ -type f -iregex ".*\.svg$" | xargs -i basename ./{} | sort | uniq | wc -l

linux-cookbook

Grupos do Google
Participe do grupo linux-cookbook
E-mail:
Visitar este grupo