如何将两个文件作为命令的参数?

时间:2019-03-09 21:02:35

标签: bash shell

我正在做一些散装的bash脚本。

它是这样的:

for file in ./*; do
    filename="$(basename "$file")"
    echo $filename >> .bulkren1
    echo $filename >> .bulkren2
done

$EDITOR .bulkren2

现在我有两个文件:

.bulkren1的旧名称

.bulkren2新名称

我想获取每一行并执行mv -i-“ $ oldname”“ $ newname”用双引号引起来,所以我可以使用空格和其他字符。最好的方法是什么?

我正在尝试许多方法,但都没有成功。

1 个答案:

答案 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