当使用 的 filename 已经存在时wget
,它将文件重命名为filename.extension.1
.是否可以将其重命名为filename.1.extension
-- 这应该是默认的?
答案1
不。
wget
将备份后缀添加到现有文件名,而不尝试解释、解析或以其他方式理解文件名。这也与创建文件备份的其他实用程序的默认行为一致。
编辑器vim
、emacs
和nano
(可能还有大多数其他编辑器)可以配置为向文件名添加备份后缀(默认情况下~
在这三个中)。流编辑器sed
可以进行就地编辑,同时使用备份原始内容sed -i.suffix
(将添加.suffix
到文件名的末尾)。 GNUmv
和cp
实用程序可以进行不同复杂程度的备份,但始终在文件名末尾附加后缀。rsync
同样,可以在用更新的文件替换原始文件之前向文件添加后缀。 ETC。
在文件名中间添加备份号是有问题的,尤其是因为文件名可以是任何不包含/
.例如,备份号码应该放在哪里,file.tar.gz
或者myfile.7
如果不是放在最后?
答案2
虽然,一旦下载,您就可以
perl-rename -i "s/(.*)(\.extension)(\.[0-9]+)$/\1\3\2/" *
rename
对于您可用的任何版本。
通过perl-rename
,使用该-i
选项可以避免覆盖现有文件。用于-n
进行“试运行”。
答案3
只是想分享我的解决方案:
alias wget='func(){ (wget --tries=0 --retry-connrefused --timeout=30 -O download_pkg.tmp "$1" && mv download_pkg.tmp "${1##*/}") || rm download_pkg.tmp; unset -f func; }; func
它创建一个接收参数“url”的函数,以将文件下载到临时名称。如果成功,则将其重命名为从参数 $1 中使用 ${1##*/} 提取的正确文件名。如果失败,则删除临时文件。如果操作被中止,临时文件将在下次运行时被替换。毕竟, unset -f 在执行别名时删除了函数定义。