【问题标题】:Perl File Handling question?Perl 文件处理问题?
【发布时间】:2011-04-15 05:50:20
【问题描述】:

我在output.txt 中有所有文件的名称,但在output.txt 文件中没有folderpath。例如,如果filename = test.txt 和它的folderpath=/usr/local/bin 比在output.txt 文件中,我只有filename as test.txt

output.txt 文件有很多filename 的条目,我想做的是:

  1. 将存在的所有文件 output.txt 移动到另一个文件夹,例如“/usr/local/test/data/”,所以我的问题是如何使用 Perl Script 来做到这一点?

    李>
  2. 使用folderpath从实际位置删除output.txt文件中存在的所有文件,例如,脚本应首先将test.txt移动到其他文件夹位置,例如@987654337 @并使用文件夹路径信息从其实际位置删除test.txt,即脚本应删除/usr/local/bin/test.txt

任何建议将不胜感激。

更新: 下面的脚本读取 output.txt 文件并获取每个文件的大小以及 output.txt 中存在的所有文件的总大小

my $folderpath = 'the_path';
open my $IN, '<', 'path/to/infile';
my $total;
while (<$IN>) {
    chomp;
    my $size = -s "$folderpath/$_";
    print "$_ => $size\n";
    $total += $size;
}
print "Total => $total\n";

礼貌:RickFAnswer

输出.txt

2304_2328_Test Data November 19 2003 - Test Tele.xls
2344_2341_Data Dummy Test 12-17.doc
2343_2342_Dummy Test Test 12-17.doc

我的 output.txt 文件中也有一些文件名包含特殊字符,例如, 63551_106640_63551 IBM&amp;#253;Software Delivery&Fulfillment(Div-61) Data IPS 08-20-2010 v3.xlsm

如果您在上面看到文件的编码值为&amp;#253,但我的文件名具有实际的特殊字符符号,因此复制或移动也会考虑我的这个文件并移动文件。

【问题讨论】:

  • 你能展示几行你的output.txt文件,以及你目前的脚本内容吗(如果你已经开始写的话)?
  • 如果要在unix中引用文件,用"?"在文件名或特殊字符中?

标签: perl file scripting


【解决方案1】:

一个建议是使用 perl 的rename 函数。您可以像这样使用它来移动文件:

use 5.012;
use warnings;

my $folderpath = '/some/where/';   # is it really "/usr/local/bin"? be careful now!!
my $tofolder   = '/usr/local/test/data';  # must have permissions to use this and $folderpath

my @files = ('test.txt', 'someotherfile.txt');

for my $file (@files) {
    rename "$folderpath/$file", "$tofolder/$file"
        or warn "Couldn't move $file";
}

【讨论】:

  • File::Copy 有一个可能更安全的move 函数。
  • @Platinum Azure:你能举个例子吗?
  • 如何处理名称中包含特殊字符的文件?复制会考虑特殊字符文件吗?
  • 这仅在沿同一个磁盘移动文件时才有效,不是吗?
  • 是的File::Copy 是更通用的方法。我的 suggestionteach someone to fish 答案,因此包括指向 perldoc (perldoc.perl.org) 的链接和 perms 等的查询。(原始)问题被描述为 Unix only 解决方案..所以我是希望 OP 会看到 rename 脚注:对于独立于平台的移动功能,请查看 File::Copy 模块。
猜你喜欢
  • 2023-03-20
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-09
  • 2013-07-10
  • 1970-01-01
  • 2016-07-11
相关资源
最近更新 更多