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

问题描述 投票:-1回答:1

我有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命令的参数源。

有任何想法吗?

谢谢

bash sh rename mv
1个回答
1
投票

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

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 --
© www.soinside.com 2019 - 2024. All rights reserved.