我正在试图找出一种方法来组织文件夹中的文件 perl的。我的脚本的基础很简单。该脚本读取 根文件夹中的子文件夹,遍历每个文件夹,并使用 简单比较文件名中的前3位数到3 数字文件夹名称。如果它们不匹配,则将其置于右侧 的地方。
我的问题是,在查看文件时,我有时会运行
到重复的订单号。因为订单已经存在我
不能覆盖原来的,但这两个文件不能存在
同一个地方有明显的原因。所以我想出了这个想法
将单词_TEMP
附加到文件名的末尾以便移动
他们可以稍后重命名。我现在遇到的问题
是我已经有两个重复。我正在寻找一种方法
允许TEMP标记在每次使用时递增1然后
每次循环重新开始时重置为零。我不是真的
确定我应该在哪里实现这个想法。
以下是该脚本的主要例程:
foreach my $office (keys %office_names) {
make_junk_folder($office);
# The matches and unmatches come back as array references!
my ($returned_matches, $returned_unmatches) = read_root_folder($office);
foreach my $folder (@$returned_matches) {
my $returned_files = read_subfolder($office, $folder);
foreach my $file (@$returned_files) {
analyze_file($office,$folder,$file);
}
}
foreach my $folder (@$returned_unmatches) {
print "$folder\n";
remove_root_junk($office,$folder);
}
}
这是处理文件移动和重命名的子程序:
sub analyze_file {
my $office = shift;
my $folder = shift;
my $file = shift;
my $order_docs_path = $office_names{$office};
if ($file =~ /^(?<office> (C[AFL]|ME)) (?<folder_num> \d{3})
(?<file_num> \d{3}) ([_|\-] \d+)? \. (?<file_ext> pdf)
$/xmi) {
my $file_office = uc($+{office});
my $folder_num = $+{folder_num};
my $file_num = $+{file_num};
my $file_ext = lc($+{file_ext});
# Change hyphens to a underscore
$file_num =~ s/\-/_/;
my $file_name = "$file_office" . "$folder_num" . "$file_num" .
"\." . "$file_ext";
my $temp_name = "$file_office" . "$folder_num" . "$file_num" .
"_TEMP" . "\." . "$file_ext";
if ($folder != $folder_num) {
# If the folder does not exist create the folder
if (! -e "$order_docs_path\\$folder_num") {
system "mkdir $order_docs_path\\$folder_num";
}
# Check to see if the file already exists
if ( -e "$order_docs_path\\$folder_num\\$file_name") {
# Append the file with a "_TEMP". These files are
# missorted pages belonging to a larger document
rename ("$order_docs_path\\$folder\\$file",
"$order_docs_path\\$folder_num\\$temp_name");
} else {
# Moves the file to correct place, these are mismatched files
rename ("$order_docs_path\\$folder\\$file",
"$order_docs_path\\$folder_num\\$file_name");
}
} else {
# Files are in the correct place, the file name will be
# corrected only
rename ("$order_docs_path\\$folder\\$file",
"$order_docs_path\\$folder_num\\$file_name");
}
}
}
一些示例文件名如下所示:
CF100145.pdf
CA310244.pdf
CL211745.pdf
CL211745_1.pdf(这表示第二页,来自我们的文档扫描仪)
ME102103.pdf
如果出现问题,则在更改相同作业时,而不是将文件放在应该去的位置,此人将更新的作业信息放入当前作业文件夹,该目录与文件中的前3个数字不匹配。所以稍后他们必须进行排序以解决错误,问题是只有一个办公室有超过500,000个文件,我们有4个办公室。
答案 0 :(得分:1)
我会改变这一部分:
if ( -e "$order_docs_path\\$folder_num\\$file_name") {
# Append the file with a "_TEMPn". These files are
# missorted pages belonging to a larger document
my $n = 1;
while (-e "$order_docs_path\\$folder_num\\$temp_name") {
$temp_name =~ s/TEMP\d*/TEMP$n/;
$n++;
}
rename ("$order_docs_path\\$folder\\$file",
"$order_docs_path\\$folder_num\\$temp_name");
} # ...
答案 1 :(得分:0)
您可以将_TEMP_OLD_FOLDER_NAME添加到其中。
在此文件夹中只有一个文件,因此没有文件具有相同的新名称