Очистить грязный wget скачать имена файлов

1

Иногда wget выбирает дополнительные параметры при загрузке файла, например Aev264-yale_econ2521120.m4v?bri=40.1&brs=689.

Очевидно, все, что я хочу, это Aev264-yale_econ2521120.m4v.

Я пролистал справочные страницы и не вижу ничего, что могло бы это исправить. Есть идеи?

Эндрю Болстер
источник

Ответы:

3

Если вы загружаете один файл за раз, вы можете использовать -Oопцию, которая действует как перенаправление оболочки для загруженных данных.

В противном случае этот bashфрагмент должен позаботиться об исправлении имен файлов впоследствии:

for f in *\?*; do
    mv "$f" "${f%%\?*}"
done
Дэвид З
источник
1

В качестве более общего решения, почтенный скрипт переименования работает хорошо:

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

Я почти уверен, что он уже установлен в /usr/binдистрибутивах debian / ubuntu / mint и является 42-строчным сценарием, если он не установлен (ну, на самом деле, это perl, так что это всего одна строка, если вы не разбираетесь во всей читабельности) ).

$ 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"; } }
MSW
источник