Linux Bash根据另一个文件中的行重命名多个文件
我想根据另一个文件中指定的名称重命名多个文件。 例如,我有一个名为names.txt的文件,其中包含:Linux Bash根据另一个文件中的行重命名多个文件,linux,bash,rename,file-rename,Linux,Bash,Rename,File Rename,我想根据另一个文件中指定的名称重命名多个文件。 例如,我有一个名为names.txt的文件,其中包含: Name1 Newname1 Name2 Newname2 Name3 Newname3 等 在此names.txt文件中,名称没有编号。但是,第1列和第2列中的名称链接在一起。 我可以想象,应该可以在文件中循环提取两个名称,并以某种方式在mv函数中使用它。 谢谢 假设names.txt中的所有名称都不包含空格,则可以使用以下方法: while read a b; do mv "$a" "$
Name1 Newname1
Name2 Newname2
Name3 Newname3
等
在此names.txt文件中,名称没有编号。但是,第1列和第2列中的名称链接在一起。
我可以想象,应该可以在文件中循环提取两个名称,并以某种方式在mv函数中使用它。
谢谢 假设
names.txt
中的所有名称都不包含空格,则可以使用以下方法:
while read a b; do mv "$a" "$b"; done < names.txt
读取a b时;做mv“$a”“$b”;done
即使您有空间,这也可以工作:
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
这行不通。你使用了什么输入?。使用和是个坏主意cat@MaheshKharvi,您认为使用for循环时如何循环文件。for循环将整个文件内容视为字符串流,无法处理行是否包含空格。您可以使用while循环将整行作为单个输入或多个输入读取<代码>而IFS=读取-r a b;do echo$a$b doneHi@MaheshKharvi,我同意你的看法,用“while”可以做得很好。但我们仍然可以使用我更新过的for循环,它运行得很好。