用列表重命名

时间:2015-02-12 11:19:37

标签: bash for-loop rename

我有一组文件,我想通过使用存储在txt文件中的新文件名来重命名。我的原始文件:

7170M
7172M
7187P
7192N
7198P

我想在每个文件名中添加特定的新名称,以便上述文件成为:

1956_26_7170M
1962_12_7172M
1989_32_7187P
1986_22_7192N
1943_13_7198P

我创建了一个包含新文件名的文档new_names.txt,并尝试了以下内容。

for f in *.txt; do mv "$f" "$new_name"; done < new_names.txt

但它只改变了第一个文件名。

1 个答案:

答案 0 :(得分:2)

您只能将名称的新部分存储在文件中(前提是您将按排序顺序处理文件):

1956_26
1962_12
1989_32
1986_22
1943_13

然后,迭代文件,为每个文件读取一行:

for file in 7* ; do
    read new
    mv "$file" "$new"_"$file"
done < new_names.txt

你的主要问题是for ... in没有从文件读取,它迭代in之后给出的列表。在您的情况下,列表只有一个成员:new_names.txt。此外,您没有在任何地方填充$ new_name。