【问题标题】:Rename files according to xml tag contents根据xml标签内容重命名文件
【发布时间】:2013-03-13 19:52:29
【问题描述】:

我有大量需要重命名的 XML 文件。它们是 .plist 文件。

每个文件中都有几个标签,如下所示:

<key>Name</key>
<string>Steve Allen</string>
<key>Place</key>
<string>London</string>

目前,所有文件都以长随机数命名,例如659238592496052.record,但我需要它们根据文件中的名称命名,例如SteveAllen.record(不带任何空格)。

我该怎么做?

【问题讨论】:

    标签: xml regex linux macos file


    【解决方案1】:
    for file in *.record
    do
      nameline=$(grep -A 1 '<key>Name</key>' "$file" | tail -n +2) # Get line after Name key
      name=${nameline/<string>/} # Remove initial <string>
      name=${name/<\/string>/} # Remove trailing </string>
      name=${name// /} # Remove all spaces
      mv "$file" "$name".record
    done
    

    【讨论】:

      【解决方案2】:

      您发布的片段不是有效的 xml,所以我们假设它看起来像这样

      <body>
      <item>
      <key>Name</key>
      <string>Steve Allen</string>
      </item>
      <item>
      <key>Place</key>
      <string>London</string>
      </item>
      </body>
      

      使用该片段作为输入,此程序将重命名为 args 给出的任意数量的文件 如果您将程序保存为“myrename”,那么“myrename file1.xml file2.xml file3.xml”会将 file1.xml file2.xml 和 file3.xml 的路径名更改为第一项

      被称为“key”的标签似乎以一种看起来很神奇的方式工作:/

      #!/usr/bin/perl
      
      use XML::Simple;
      for $file ( @ARGV[ 0 .. $#ARGV ] ) {
      
          my $ref = XMLin($file);
      
          $new_name = $ref->{'item'}->{'Name'}->{'string'};
      
          rename $file, "$new_name.xml" || warn "couldn't rename $file $!";
      }
      

      【讨论】:

        猜你喜欢
        • 2020-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-06
        • 2022-01-20
        • 2014-11-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多