如果在 for 循环中嵌套似乎使用所有结果而不是单个结果

Nested if in for loop appears to use all results instead of single one

我不确定这是 curl 问题还是我的代码有问题。 我正在使用 curl -T 将目录的内容上传到远程服务器,并且由于 curl 根据帮助文件和一些谷歌搜索没有办法跳过文件,如果它存在我正在尝试编写脚本它。

#!/bin/sh
cd /foo/bar
curl --user foo:bar -ls ftp://ftp.server.foo/remote/dir/ > /foo/bar/temp.txt
for file in ./*.dat
do
    if ! grep -Fq "$file" temp.txt
    then
        curl --user foo:bar -T "$file" ftp://ftp.server.foo/remote/dir/
    fi
done
rm -f /foo/bar/temp.txt

我目前在 /foo/bar 中有 6 个文件,这些文件已经上传到远程。我出于测试目的从远程删除了其中一个文件,但所有 6 个文件都重新传输了。

使用上面的代码,只要不匹配 temp.txt,curl 就会上传在 for 循环中找到的所有文件,无论它是否匹配if条件与否。我是不是遗漏了一些非常明显的东西,或者这是 curl 的东西,我最好还是使用 SuperUser?

感谢 Jonathan Leffler 的评论,我通过 sh -x script.sh 发现我的 for 声明是问题所在。按照我写的方式,它将 ./file1.dat 发送到 grep 以尝试在 temp.txt 中查找,其中只有 file1.dat 而不是 ./file1.dat具体来说。

更改为 for file in *.dat,这解决了问题。