我有很多点文件需要更改以用于模型输入。我想根据文件的内容重命名许多这些文件。这些文件是按行排列的文本文件。
文档名称: data_lat_long.txt
1 data_20_20
2 data_30_40
3 data_50_60
.
.
Run Code Online (Sandbox Code Playgroud)
等等
我的文件被命名为1,2,3,4,等,。
我想1在要被改变data_20_20,2在对data_30_40等。
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"。前者命令尝试移动文件/目录,名称1和space一个叫做目录file1。