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

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

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

文件名:data_lat_long.txt

1 data_20_20
2 data_30_40
3 data_50_60
.
.

等等

我的文件名为1234等。

我想1改成 to data_20_202in todata_30_40等等。

答案1

while read line ; do 
    mv $line 
done < data_lat_long.txt

将 的内容重定向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

然后使用:

while IFS=',' read -a files 
do 
   mv "${files[0]}" "${files[1]}" 
done < list.txt

这利用了将由(在本例中为逗号)分隔的文本分配给名为 的数组-a的选项。然后,我们对 上的各个元素进行索引,并用双引号引用参数。这样数组值就会在执行命令时扩展readIFS$filesmv""mv因此文件中的空格不会被视为参数分隔符mvmv 1 space file1不做与 相同的事情mv "1" "space file1"。前一个命令尝试将名为1和的文件/目录移动space到名为 的目录file1

相关内容