根据xml文件批量重命名文件夹中的文件

时间:2014-10-16 07:46:09

标签: xml windows shell cmd rename

我没有编写脚本的经验,我需要一些问题的帮助。 我有一个包含.pdf和.jpg对(相同名称但不同类型)的文件夹。 e.g。

file00.pdf
file00.jpg
file01.pdf
file01.jpg
file02.pdf
file02.jpg
...

我有一个看起来像这样的.xml:

<x>
   <y> lorem ipsuma </y>
       <test name="01fancyname.txt">
       </test>
</x>
<x>
   <y> lorem ipsumb </y>
       <test name="02fancyname.txt">
       </test>
</x>
<x>
   <y> lorem ipsumc </y>
       <test name="03fancyname.txt">
       </test>
</x>

因此,我要提取的名称始终位于<test name=".txt">之间。

我想:

  • 解析xml和文件夹
  • 删除第一对文件
  • 根据xml
  • 中的名称重命名文件夹中的所有对

删除第一对后,对的数量将与xml中的名称数量相同。文件夹中的第一对与xml中的第一个名称相对应,依此类推。

e.g。

file00.pdf is deleted
file00.jpg is deleted
file01.pdf becomes 01fancyname.pdf
file01.jpg becomes 01facyname.jpg
file02.pdf becomes 02fancyname.pdf
file02.jpg becomes 02facyname.jpg
etc

文件按名称排序,就像在示例中一样。 谢谢!

1 个答案:

答案 0 :(得分:0)

整个答案是:(解释如下)

paste <(grep -o 'name="[^"]*"' *.xml | cut -d'"' -f2 | cut -d'.' -f1 | awk '{print $0; print $0;}' -) <(awk 'NR <= 2 {system("rm "$9);} NR > 2 && NF >= 9 {print $9;}' <(ls -l *.jpg *.pdf) | sort) | awk '{match($2,/[a-zA-Z0-9]+(\.[a-zA-Z]+)/,a); system("mv "$2" "$1a[1]);}' -

Paste有2个输入,第一个是:

grep -o 'name="[^"]*"' *.xml | cut -d'"' -f2 | cut -d'.' -f1 | awk '{print $0; print $0;}' -

它的输出是:

01fancyname
01fancyname
02fancyname
02fancyname
03fancyname
03fancyname

这里我从XML文档中获取文件名(没有扩展名),然后打印两次(因为我们将移动2个文件,pdf和jpg)。

第二个论点是:

awk 'NR <= 2 {system("rm "$9);} NR > 2 && NF >= 9 {print $9;}' <(ls -l *.jpg *.pdf) | sort

它的输出是:

file01.jpg
file01.pdf
file02.jpg
file02.pdf
file03.jpg
file03.pdf

请注意,使用file00.jpg中的file00.pdf删除了system("rm "$0);AWK)。

一旦我们有了这些输入,就让我们粘贴! paste <(...) <(...)

01fancyname file01.jpg
01fancyname file01.pdf
02fancyname file02.jpg
02fancyname file02.pdf
03fancyname file03.jpg
03fancyname file03.pdf

最后,我们使用原始文件中的正则表达式获取扩展,并允许执行mv来更改名称:

awk '{match($2,/[a-zA-Z0-9]+(\.[a-zA-Z]+)/,a); print ("mv "$2" "$1a[1]);}' -

就是这样。执行的命令是:

rm file00.jpg
rm file00.pdf
mv file01.jpg 01fancyname.jpg
mv file01.pdf 01fancyname.pdf
mv file02.jpg 02fancyname.jpg
mv file02.pdf 02fancyname.pdf
mv file03.jpg 03fancyname.jpg
mv file03.pdf 03fancyname.pdf