我有一组文件,我想通过使用存储在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
但它只改变了第一个文件名。
答案 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。