Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Bash根据另一个文件中的行重命名多个文件_Linux_Bash_Rename_File Rename - Fatal编程技术网

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

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" "$

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

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循环,它运行得很好。