我经常需要通过curl
迭代一些图片下载,并且想要丢弃那些低于特定文件大小的下载,因为它们显然不存在,i。即返回的“图像”是404页面。 curl
有一个--max-filesize
选项,但不是最小文件大小的选项。
我在考虑将URL图像位置和最小文件大小传递给脚本curlmin
的内容,例如
curlmin url minfilesize
我相信,因为我使用[]来迭代几天使用字母数字序列序列,所以我需要能够“动态”删除某些文件大小以下的文件。我在下面的尝试是完整的,因为我坚持如何引用'if'语句中的“当前”文件以及如何实际删除文件。但也许我的一个班轮也不会在第一时间起作用。
#!/bin/bash
curl -O $1 | if [ $(wc -c <"$1") -le $2 ]; then delete_file_here; fi
^^ ^^^^^^^^^^^^^^^^
有什么想法吗?感谢。
答案 0 :(得分:2)
如果您只是希望curl
避免在远程文件不存在时创建本地文件,或者在请求/下载时出错,请使用-f
标记:
curl -fO "$1"
但是,如果要删除特定大小以下的文件,可以选择以下几种方法:
您可以使用parameter expansion获取文件名,以删除最后/
之类的所有内容,例如${1##*/}
所以你可以做到
curl -O "$1"
if [[ $(wc -c < "${1##*/}") -le $2 ]]; then
rm -f "${1##*/}"
fi
或者我们可以使用find
检查:
curl -O "$1"
find . -type f -name "${1##*/}" -size -"$2"c -delete
假设您的find
支持-delete
。否则,您可以将其替换为-exec rm -f {} +
如果您的curl
命令可能会下载多个文件,您可以轻松调整find
命令,以查找目标结构中小于给定大小的所有文件。
最安全的方法是使用find
,因为它不会被奇怪的文件名绊倒。如果做不到这一点,您可以尝试使用能够更好地支持这些操作的其他语言。如果您确信只有安全名称,可以尝试以下方法:
curl -O "$1" 2>&1 | awk -v min_size="$2" '/-->/ {"stat -c%s " $NF | getline s; if(s < min_size) {system("rm " $NF);}}'
将$2
作为变量awk
传递给min_size
。然后,我们将查看包含curl
的{{1}}输出的每一行。这些行的最后一个字段(再次假设安全名称)是本地文件名,因此我们将在其上调用-->
以获取大小(stat
),然后检查该大小是否低于我们{ {1}}。如果是,请在其上调用-c %s
,再次相信我们有安全名称,而不是包含min_size
或全球字符等的名称。
答案 1 :(得分:0)
使用wget
和大括号扩展 [ Check here ] 来解决问题
wget http://www.bom.gov.au/gms/IDE00135.201707{031630..031637}.jpg