Arquivos de tubulação baixados com o wget em uma função

2

Estou baixando um monte de imagens com o wget e quero rm os arquivos se eles estiverem vazios com uma função para a qual eu possa passar o arquivo. Minha pergunta é como canalizar as imagens para uma função como esta:

rmEmpty ()
{
    if ! [ -s "$1" ]
    then
        rm "$1";
    fi
}

A maneira como faço o download das imagens é

wget -q -O- http://www.mtgsalvation.com/forums/creativity/artwork/340782-official-digital-rendering-thread?page=$i | 
sed -n '{/forum-post-body-content/,/p-comment-notes/p}' |
grep -Po 'src="\K[^"]+' | xargs wget -q -T 6 -t 1

Então eu gostaria de algo como xargs wget | rmEmpty() no final, se isso for possível.

    
por Arturo 27.12.2014 / 17:25

3 respostas

1

Primeiro, prefira usar wget -i - over xargs wget , porque a maneira xargs pode executar (seqüencialmente) vários comandos wget (se você tiver muito URL para recuperar) enquanto o wget -i - será executado somente um (e, portanto, se o servidor remoto suportar, use a mesma conexão TCP).

Escrever sua própria função rmEmpty é inútil, pois find . -empty -type f -delete fará o trabalho (melhor).

Para resumir:

BASE_URL="http://www.mtgsalvation.com/forums/creativity/artwork/340782-official-digital-rendering-thread?page=$i"
wget -q -O- "$BASE_URL" | \
    sed -n '{/forum-post-body-content/,/p-comment-notes/p}' | \
    grep -Po 'src="\K[^"]+' | wget -i - -q -T 6 -t 1

find . -maxdepth 1 -empty -type f -delete

Eu adicionei o -maxdepth 1 para evitar problemas se você executar esse script em um diretório com muitos subdiretórios ( $HOME , por exemplo). Você deve executar esse script em um diretório dedicado (vazio antes de executar o script).

    
por 27.12.2014 / 18:16
1

Tente isto:

rmEmpty ()
{
    if ! [ -s "$1" ]
    then
        rm "$1"
    fi
}

ou ainda mais curto:

rmEmpty() { [ -s "$1" ] || rm -f "$1"; }

Então:

for $file in *; do
    rmEmpty "$file"
done
    
por 27.12.2014 / 17:39
1

Usando um analisador HTML adequado em :

#!/usr/bin/env perl
use strict; use warnings;
use WWW::Mechanize;
use HTML::TreeBuilder::XPath;

my $m = WWW::Mechanize->new( autocheck => 1 );
$m->get("http://www.mtgsalvation.com/forums/creativity/artwork/340782-official-digital-rendering-thread?page=1");
my $tree = HTML::TreeBuilder::XPath->new_from_content( $m->content );
my @imgs = $tree->findvalues( '//div[@class="j-comment-body-container p-comment-body forum-post-body-content"]//img/@src' );
'wget -i - -q -T 6 -t 1 @imgs; find . -maxdepth 1 -empty -type f -delete';
    
por 27.12.2014 / 18:30