Limpar o nome do arquivo de download do wget bagunçado

1

Às vezes o wget pega parâmetros extras ao baixar um arquivo, exemplo Aev264-yale_econ2521120.m4v?bri=40.1&brs=689 .

Obviamente tudo que eu quero é Aev264-yale_econ2521120.m4v .

Eu examinei as páginas do manual e não consigo ver nada que se destaque que possa consertar isso. Alguma idéia?

    
por Andrew Bolster 11.07.2010 / 03:09

2 respostas

3

Se você estiver baixando um arquivo por vez, poderá usar a opção -O , que funciona como um redirecionamento de shell para os dados baixados.

Caso contrário, esse bash snippet deve corrigir os nomes dos arquivos depois:

for f in *\?*; do
    mv "$f" "${f%%\?*}"
done
    
por 11.07.2010 / 03:55
1

Como uma solução mais geral, o venerável renomeia o script funciona bem:

 $ rename 's/m4v.*$/m4v/' Aev264*.m4v*

Tenho certeza que ele já está instalado em /usr/bin nas distribuições debian / ubuntu / mint e é um script de 42 linhas, se não estiver instalado (na verdade, é perl, então é apenas uma linha se você estiver não em toda a capacidade de legibilidade).

$ squish /usr/bin/rename
use strict; use Getopt::Long; Getopt::Long::Configure('bundling'); my ($verbose, $no_act, $force, $op); die "Usage: rename [-v] [-n] [-f] perlexpr [filenames]\n" unless GetOptions( 'v|verbose' => \$verbose, 'n|no-act' => \$no_act, 'f|force' => \$force, ) and $op = shift; $verbose++ if $no_act; if (!@ARGV) { print "reading filenames from STDIN\n" if $verbose; @ARGV = <STDIN>; chop(@ARGV); } for (@ARGV) { my $was = $_; eval $op; die $@ if $@; next if $was eq $_; if (-e $_ and !$force) { warn "$was not renamed: $_ already exists\n"; } elsif ($no_act or rename $was, $_) { print "$was renamed as $_\n" if $verbose; } else { warn "Can't rename $was $_: $!\n"; } }
    
por 11.07.2010 / 07:27

Tags