根据文本文件的内容重命名文件

AiB*_*AiB 4 rename files

我有很多点文件需要更改以用于模型输入。我想根据文件的内容重命名许多这些文件。这些文件是按行排列的文本文件。

文档名称: data_lat_long.txt

1 data_20_20
2 data_30_40
3 data_50_60
.
.
Run Code Online (Sandbox Code Playgroud)

等等

我的文件被命名为1234,等,。

我想1在要被改变data_20_202在对data_30_40等。

Dra*_*oan 7

while read line ; do 
    mv $line 
done < data_lat_long.txt
Run Code Online (Sandbox Code Playgroud)

将 的内容重定向data_lat_long.txt到一个while循环,该循环read用于读入文件的每一行,并为每一行将其分配给一个名为$line. 然后将mv的内容$line作为参数运行(这是您在data_lat_long.txt文件中指定的 from 和 to 部分)。继续循环直到文件结束。

请注意,这隐含地要求您的文件名中都不data_lat_long.txt包含空格(因此只有两列)。

如果文件中有空格,那么我建议在您的文件中使用逗号分隔符:

1,space file1
2,space file2
3,space file3
Run Code Online (Sandbox Code Playgroud)

然后使用:

while IFS=',' read -a files 
do 
   mv "${files[0]}" "${files[1]}" 
done < list.txt
Run Code Online (Sandbox Code Playgroud)

这利用了-a选项readwhich 将由IFS(在本例中为逗号)分隔的文本分配给名为$files. 然后我们索引 上的各种元素mv并用双引号引用参数""。这是因为数组值在执行mv命令时被扩展因此文件中的空间不被mv. mv 1 space file1不做同样的事情mv "1" "space file1"。前者命令尝试移动文件/目录,名称1space一个叫做目录file1