在 bash 中重命名包含 2 个列表的文件

rename a file with 2 lists in bash

我有 2 个文本文件,old.txt 包含所有需要重命名的文件列表,new.txt 包含新名称。 例如,old.txt

23654.jpg
hello world.doc
ok, it's done.docx

new.txt

2018.jpg
old.doc
...

我想逐行读取这些文件并在命令 mv 的参数中使用它们。我可以使用一个文件 (while read line) 但我不知道如何管理第二个文件...

总之,我想使用 2 个文件作为另一个 bash 命令的参数源。

有什么想法吗?

谢谢

您可以使用另一个 read 不同的 FD:

while IFS= read -r old_name && IFS= read -r new_name <&3; do
    mv -- "$old_name" "$new_name"
done <old.txt 3<new.txt

或使用 paste 和 GNU xargs(对于 -d 选项):

paste -d'\n' {old,new}.txt | xargs -d'\n' -n2 mv --