我有很多点文件需要更改以用于模型输入。我想根据文件的内容重命名许多这样的文件。这些文件是按行排列的文本文件。
文件名:data_lat_long.txt
1 data_20_20
2 data_30_40
3 data_50_60
.
.
等等
我的文件名为1
、2
、3
、4
等。
我想1
改成 to data_20_20
、2
in 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
的选项。然后,我们对 上的各个元素进行索引,并用双引号引用参数。这样数组值就会在执行命令时扩展read
IFS
$files
mv
""
mv
和因此文件中的空格不会被视为参数分隔符mv
。mv 1 space file1
不做与 相同的事情mv "1" "space file1"
。前一个命令尝试将名为1
和的文件/目录移动space
到名为 的目录file1
。