根据内容更改文件名

根据内容更改文件名

我正在尝试根据文件本身的内容重命名一组文件。当我完成时,我可能有一千多个文件需要重命名。我有代码可以获取文件名的第一部分,但我需要在文件名中包含其他元素。这是我每天在另一项任务中使用的代码的第一部分。

# open(INFILE,"list.txt") or die "could not open file for reading!\n";
open(OUTFILE, '>forecast_mips.txt') or die "Cannot open forecast.txt: $!";

my @output;

while(<INFILE>) {
    chomp;
    next if /^\s*$/;

    my @fields = split;

    foreach my $field (@fields) {
            push @output, $field
            if $field =~ /^\*?[ABMQRWY][A-Z0-9]{4}235/;

    
                
    }
    foreach my $field1 (@fields
}

print OUTFILE join("\n", @output), "\n";
print join(@output),"\n";

不过,我试图在文件名中包含其他两个元素。文件中包含上述代码生成的作业名称,但我还需要作业编号(5 位数字)和运行日期(5 位儒略固定日期)。以下是该文件的基础。粗体文本是我需要的文件名。该日期需要是儒略日期,在本例中为 22356。因此,在下面的内容中,文件名将为 D47YC235#03618-22356。不确定是否有更好的方法来检索以下项目并设置文件名。 if $field =~ 行从文件中生成 D47YC235。

00.55.30 JOB03618  ICH70001I $$MP235  LAST ACCESS AT 00:55:30 ON THURSDAY, **DECEMBER 22, 2022**
00.55.30 JOB**03618**  $HASP373 **D47YC235** STARTED - INIT 39   - CLASS R        - SYS V4YM

答案1

假设文件以指定格式的两行开头,并且我们在命令行上有它们的名称,TXR计算重命名的程序如下所示:

$ txr data.txr data
rename data -> D47YC235#03618-22356
$ txr data.txr data data data data
rename data -> D47YC235#03618-22356
rename data -> D47YC235#03618-22356
rename data -> D47YC235#03618-22356
rename data -> D47YC235#03618-22356

程序在哪里data.txr

@(next :args)
@(repeat)
@filename
@  (next filename)
@nil JOB@job @nil @nil LAST ACCESS AT @time ON @wday, @date
@nil JOB@job @nil @code @nil
@  (bind newname `@code#@job-@{(time-parse "%b %d, %Y" date).(time-string "%y%j")}`)
@  (do (put-line `rename @filename -> @(path-cat (dir-name filename) newname)`))
@(end)

这仅打印 shell 命令语法中的重命名,而不实际执行它们以供参考。要实际进行重命名,我们可以使用rename-pathTXR Lisp 中的函数:

@  (do (rename-path filename (path-cat (dir-name filename) newname)))

请注意,我们job从这两行中提取了变量。这就是反向引用:两个位置必须匹配,否则该文件将被跳过。

使用 Vim 语法高亮显示的代码:

在此输入图像描述

相关内容