使用列表重命名

Renaming with lists

我有一组文件,我想使用存储在 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

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

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

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。