Pular para o conteúdo principal

Problema de conjuntos resolvido com ferramentas do Linux

Essa experiência foi suscitada a partir de uma questão prática: Um dia enviei um tarball do meu diretório de wallpapers pro meu amigo Sryche (Cainã Costa). Depois, acrescentei outras wallpapers no mesmo diretório. O problema é que o Sryche novamente me pediu wallpapers, mas somente os que ele não tinha. Como fazer? Ele me mostrou o caminho então e aqui eu reproduzo a experiência, primeiro em tese e depois explico na prática:

Primeiro criei 1 diretório de testes com
dois dirs dentro dele:

$ mkdir -p testes/waka{1,2}

Dentro de ~/testes/waka1 criei 3 arquivos e os copiei para waka2 (eu poderia simplesmente copiar o waka1 para waka2 com outro nome, mas prefiro fazer dessa forma por conta da lógica do problema):


$ cd testes/waka1/

$ touch teste-{a,b,c} && cp teste-* ../waka2

Portanto, dentro de waka1 e waka2, o conteúdo agora era idêntico: 3 arquivos, teste-a, teste-b e teste-c.

Depois, dentro de waka1, eu criei mais 3 arquivos:

$ touch teste-{d,e,f}

Agora, o conteúdo dos dirs diferiam, pois o waka1 tinha 6 elementos e o waka2, apenas 3.

Depois, dei um $ ls ../waka2 > arg ainda dentro do dir waka1, criando um arquivo com os elementos de waka2, que me servirá mais tarde de argumento.

E finalmente no dir waka1 eu removi apenas os arquivos que eu não tinha em waka2:

$ xargs --arg-file=arg rm ;

O ls waka1 demonstrará o resultado da experiência. Só restaram, obviamente, os arquivos que não existem em waka2.

Foi assim que resolvemos o problema do envio dos wallpapers.

Na ocorrência real, eu não sabia quantos e quais os wallpapers tinham sido adicionados ao diretório (eu poderia ver pela data com ls, e com sed, grep e outros comandos, tentar resolver o problema, mas tb não sabia quando os tinha enviado). Assim, o Sryche deu um ls no diretório que ele recebeu lá e me enviou a saída por pastebin (o problema todo é que eram muitos wallpapers e na época o Sryche tinha conexão discada). Eu copiei a minha p
asta de diretórios e usando a saída do Sryche como argumento, removi todos os wallpapers que ele já tinha. O que restou, obviamente, eram os wallpapers que ele não tinha, então empacotei o diretório e disponibilizei ao Sryche com um link em um HD virtual.

A resolução do problema coube ao Sryche e estou publicando-a porque a achei simples e genial (disse a ele à época) e acho que a lógica envolvida pode ajudar mais pessoas em problemas similares.

Se vc tem uma outra maneira de resol
ver esse interessante problema só com comandos do linux, por favor, deixe-nos conhecê-la, através de um comentário!

Grande abraço a todos!


Comentários

Anônimo disse…
Ótima solução, eu só havia pensado com grep. Ela foi muito mais simples e mais rápida do que a que pensei, já que com apenas dois comandos vocês conseguiram completar o objetivo, e o linux está ai pra isso, produtividade e qualidade, deixando para nós apenas as tarefas mais nobres. :D
Anônimo disse…
Hello. This post is likeable, and your blog is very interesting, congratulations :-). I will add in my blogroll =). If possible gives a last there on my blog, it is about the Smartphone, I hope you enjoy. The address is http://smartphone-brasil.blogspot.com. A hug.
Anônimo disse…
Este comentário foi removido por um administrador do blog.
Ξ disse…
Tive um problema parecido há poucos minutos: queria excluir músicas duplicadas que estavam em duas pastas.

Não deu outra, lembrei logo daqui!
Gabriel disse…
eu usuaria um diff para isso, exemplo:
gabriel@debian:~$ ls > teste.txt
gabriel@debian:~$ touch teste2
gabriel@debian:~$ ls > teste2.txt
gabriel@debian:~$ diff teste.txt teste2.txt | awk '/^>/ {print $2}'
resultado:
teste2
teste2.txt

Postagens mais visitadas deste blog

Creating an extra custom menu in openbox WM

    Hi, folks. It's been a while, isn't it?     Well, I know nowadays people are telling X11 will be dead soon and the future is Wayland, but for the ones like me, dinosaurs that can't live without things like fluxbox or openbox, how the future will be?      O penbox is a very mature WM, offering some tricks we don't see much around here.     Here's  one much helpful: Making custom menus.       I've already shown the path to do the same in fluxbox in the past.       Now I show you all to do that in openbox.     First, locate in rc.xml the block of code that refers the menu. It's something like this: < menu>     <hideDelay>250</hideDelay>     <middle>no</middle>     <submenuShowDelay>100</submenuShowDelay>     <submenuHideDelay>400</submenuHideDelay>     <applicationIco...

Window list in Fluxbox

One of the best features on openbox comes "hidden" in Fluxbox. To use it, put a line in your "keys" (/home/"user"/.fluxbox/keys) file like that: Mod4 Escape    :ClientMenu In my case, when I click windows button+escape I get: That's it!

Openbox: trays e bmpanel

Todos sabem que sou amante dos gerentes de janelas minimalistas, que ocupam pouco espaço na memória e que uso muito o openbox. Na verdade, existe uma funcionalidade que o openbox não provê nativamente e em virtude dessa deficiência, é necessário usar um programa externo. Tal funcionalidade é o que se chama de systray, que é geralmente uma pequena barra onde ficam alocados os ícones de certas aplicações, como o parcellite, o beep-media-player-x, o quodlibet (geralmente players têm essa característica). Então, você pode interagir com o programa mesmo ali de seu ícone na systray, no caso de players, com comandos como "play", "pause", stop, etc. Contudo, como disse anteriormente, o fato é que no openbox, essa funcionalidade não é provida, de modo que eu tive problemas com aplicações como o player beep-media-player-x (minha aplicação favorita para ouvir rádio na web), porque em sua configuração padrão, quando você clica no "x" da janela, a aplicação não é morta...