如果在 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
,这解决了问题。
我不确定这是 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
,这解决了问题。