我正在做一些散装的bash脚本。
它是这样的:
for file in ./*; do
filename="$(basename "$file")"
echo $filename >> .bulkren1
echo $filename >> .bulkren2
done
$EDITOR .bulkren2
现在我有两个文件:
.bulkren1的旧名称
.bulkren2新名称
我想获取每一行并执行mv -i-“ $ oldname”“ $ newname”用双引号引起来,所以我可以使用空格和其他字符。最好的方法是什么?
我正在尝试许多方法,但都没有成功。
答案 0 :(得分:4)
从两个文件并行读取非常棘手。您需要使用唯一的文件描述符(此处分别为3和4)打开这两个文件,然后在循环中使用两个read
语句逐行读取它们。
exec 3< .bulkren1
exec 4< .bulkren2
while IFS= read -r oldname <&3 && IFS= read -r newname <&4; do
mv -i -- "$oldname" "$newname"
done
exec 3<&- 4<&- # Close files.
您可以通过将exec
与循环结合来压缩它。摆脱了最后关闭文件的需要,但是可读性受到影响:
while IFS= read -r oldname <&3 && IFS= read -r newname <&4; do
mv -i -- "$oldname" "$newname"
done 3<.bulkren1 4<.bulkren2