使用 tar 的复杂文件名时出错 ->用 Perl 写

发布于 2024-10-01 17:59:02 字数 342 浏览 1 评论 0原文

在使用 tar->write() 时,我在使用复杂文件名时遇到错误。

代码是:

my $filename= $archive_type."_".$from_date_time."_".$to_date_time."tar";
$tar->write($filename);

我得到的错误是: 无法为“postProcessProbe_2010/6/23/3_2010/6/23/7.tar”创建文件句柄:

test.pl 第 24 行没有这样的文件或目录

如果我将 $filename 更改为像 out.tar 这样的简单字符串,一切正常。

While using tar->write() I am getting errors while using complex file names.

The code is:

my $filename= $archive_type."_".$from_date_time."_".$to_date_time."tar";
$tar->write($filename);

The error i get is:
Could not create filehandle for 'postProcessProbe_2010/6/23/3_2010/6/23/7.tar':

No such file or directory at test.pl line 24

If I change the $filename to a simple string like out.tar everything works.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

执着的年纪 2024-10-08 17:59:02

嗯,/ 是 *nix 系统上的目录分隔符(并且 Windows 内部可互换地对待 /\),我相信 tar 文件,无论平台如何,都在内部使用它作为目录分隔符。

我认为您无法在 *nix 或基于 Windows 的系统上创建包含 / 的文件名。即使你可以,这也可能会在以后带来一系列令人头痛的问题。

以我的拙见,最好切换到更清晰的日期格式,例如 YYYYMMDD

另外,当 sprintf 更清晰时,您正在使用字符串连接:

my $filename= sprintf '%s_%s_%s.tar', $archive_type, $from_date_time, , $to_date_time ;

Well, / is the directory separator on *nix systems (and, internally Windows treats / and \ interchangeably) and I believe tar files, regardless of platform use it internally as the directory separator.

I do not think you can create file names containing / on either *nix or Windows based systems. Even if you could, that would probably create a whole bunch of headaches down the road.

It would be better in my humble opinion to switch to a saner date format such as YYYYMMDD.

Also, you are using string concatenation when sprintf would have been much clearer:

my $filename= sprintf '%s_%s_%s.tar', $archive_type, $from_date_time, , $to_date_time;

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文