Bash 根据另一个文件中的行重命名多个文件

Bash rename multiple files according to line in another file

我想根据另一个文件中指定的名称重命名多个文件。 例如,我有一个名为 names.txt 的文件,其中包含:

Name1 Newname1
Name2 Newname2
Name3 Newname3

等等

在此 names.txt 文件中,名称未编号。但是,第 1 列和第 2 列中的名称链接在一起。 我可以想象它应该可以遍历文件以提取两个名称并以某种方式在 mv 函数中使用它。 谢谢!

假设 names.txt 中的 none 个名称包含空格,您可以使用:

while read a b; do mv "$a" "$b"; done < names.txt

即使你有 space :

SAVE_IFS=$IFS
IFS=$(echo -en "\n\b")
for row in `cat names.txt`
do
    echo $row
    cur_name=`echo $row | awk -F " " '{print }'`
    new_name=`echo $row | awk -F " " '{print }'`
    echo "mv $cur_name $new_name"
done
IFS=$SAVE_IFS