Bash 如何将两个文件作为命令的参数?
我正在重新命名bash脚本 事情是这样的:Bash 如何将两个文件作为命令的参数?,bash,shell,Bash,Shell,我正在重新命名bash脚本 事情是这样的: for file in ./*; do filename="$(basename "$file")" echo $filename >> .bulkren1 echo $filename >> .bulkren2 done $EDITOR .bulkren2 现在我有两个文件: .bulkren1与旧名称相同 .bulkren2的新名称 我想得到每一行,然后用双引号做一个mv-I-$oldname$n
for file in ./*; do
filename="$(basename "$file")"
echo $filename >> .bulkren1
echo $filename >> .bulkren2
done
$EDITOR .bulkren2
现在我有两个文件:
.bulkren1与旧名称相同
.bulkren2的新名称
我想得到每一行,然后用双引号做一个mv-I-$oldname$newname,这样我就可以使用空格和其他字符了。最好的方法是什么
我尝试了很多方法,但都没有成功。并行读取两个文件很棘手。您需要在这里使用唯一的文件描述符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.
并行读取两个文件是很棘手的。您需要在这里使用唯一的文件描述符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.
只使用一个文件不是更简单吗?顺便说一句,echo$filename比echo$filename更容易出错;应用。比这更好的是printf“%s\n”$filename,它可以正确处理echo可能阻塞的某些文件名。仅使用一个文件,如何将两个名称封装在双引号内?我应该在file1和file2中添加双引号并粘贴-d file1 file2>file3吗?这是个好问题!你把它作为一个单独的问题问怎么样?它应该有自己的帖子。@grand0rbitter,我认为mkrieger1建议在lockstep中迭代./*和.bulkren2的内容。需要能够假设目录的内容没有改变,ofc,所以这有点冒险。不确定你在说什么re:quotes-你不应该在文件中有引号;这将使它们成为数据,它们只有在语法上才有意义/用途。只使用一个文件不是更简单吗?顺便说一句,echo$filename比echo$filename更容易出错;应用。比这更好的是printf“%s\n”$filename,它可以正确处理echo可能阻塞的某些文件名。仅使用一个文件,如何将两个名称封装在双引号内?我应该在file1和file2中添加双引号并粘贴-d file1 file2>file3吗?这是个好问题!你把它作为一个单独的问题问怎么样?它应该有自己的帖子。@grand0rbitter,我认为mkrieger1建议在lockstep中迭代./*和.bulkren2的内容。需要能够假设目录的内容没有改变,ofc,所以这有点冒险。不确定你在说什么re:quotes-你不应该在文件中有引号;这将使它们成为数据,它们只有在语法上才有意义/用途。