清理混乱的 wget 下载文件名

清理混乱的 wget 下载文件名

有时 wget 在下载文件时会选择额外的参数,例如Aev264-yale_econ2521120.m4v?bri=40.1&brs=689

显然我想要的是Aev264-yale_econ2521120.m4v

我浏览了手册页,没有找到任何可以解决这个问题的方法。有什么想法吗?

答案1

如果您一次只下载一个文件,则可以使用该-O选项,其作用类似于下载数据的 shell 重定向。

否则,此bash代码片段应该负责随后修复文件名:

for f in *\?*; do
    mv "$f" "${f%%\?*}"
done

答案2

作为一种更普遍的解决方案,令人尊敬的重命名脚本效果很好:

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

我很确定它已经安装在/usr/bindebian/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"; } }

相关内容