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

时间:2015-09-07 17:06:29

标签: linux bash rename file-rename

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

Name1 Newname1
Name2 Newname2
Name3 Newname3

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

2 个答案:

答案 0 :(得分:2)

假设names.txt中的所有名称都不包含空格,您可以使用:

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

答案 1 :(得分:0)

即使你有空格,这也会有效:

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