2017-07-07 359 views
1

在一个文件夹中,我有600个文件,编号从001到600.它看起来像foo_001.bar。在一个文本文件中,我有这个文件夹的标题&。现在我想用文本文件中相应的001标题foobar重命名foo_001.bar。使用文本文件作为源重命名文件

但我不知道如何在Linux Mint上正确执行此操作。有人可以帮我或给我一个小费吗?

titles.txt的内容看起来像这样。数字和标题之间有一个制表符(可以轻松修改)。

001 title of 1 
002 this is 2 
003 and here goes 3 
004 number four 
005 hi this is five 
etc 

该文件夹的内容如下所示。没有例外。

file_001.ext 
file_002.ext 
file_003.ext 
file_004.ext 
file_005.ext 
etc 
+0

你能告诉我们一些示例文件,你想如何重命名?这将有所帮助 – Inian

+0

你想要这些文件被命名为“1.ext”的标题,“这是2.ext”等等? – Jack

回答

2

通过与read您的文件只是循环,得到了分离式柱与 awk 相应cut(谢谢你,@Jack)和mv您的文件。在这个非常简单的实现中,我假定包含新名称的文本文件位于./filenames,并且您的脚本是从包含文件的目录中调用的。

#!/bin/bash 
while IFS='' read -r line || [[ -n "$line" ]]; do 
     NR=$(echo "$line" | cut -f 1) 
     NAME=$(echo "$line" | cut -f 2) 
     if [ -f "foo_${NR}.ext" ] ; then 
       mv "foo_${NR}.ext" "$NAME" 
     fi 
done < filenames 
+1

我知道这只是一种风格的东西,但'cut -f 1'比'awk -F'\ t''{print $ 1}'简单得多。 – Jack

+0

非常感谢!做了一些小变动,但它工作:-)我想知道为什么最后提到的文件名?它必须在那里,但是为什么? – MatthijsG

+0

你需要用一些输入来提供'read'来实际读取。这是通过将文件“文件名”的内容传送到“读取时”来完成的;做...'循环。 –