我想要的功能是寻找当前目录及子目录下所有与传入的分辨率相同的图片的地址。
然而,实际根本无法使用……虽然只有这么一点功能,但是架不住我要找的目录里图片多啊……差不多有 10g 了……第一版直接用不了,我调试了一下,find 还是可以接受的,但是一行一行 awk 太慢了,我尝试了多线程和回溯,勉强可以出结果了,但是我觉得不应该这么慢的,可能是我太菜了……毕竟我甚至不知道怎么把 find 的结果直接在内存中处理,甚至需要写到文件中的……
#!/usr/bin/env bash
set -euo pipefail
if [[ $# != 2 ]]; then
echo bad argument.
exit 1
fi
TEMP_FILE=".todo.find"
find . -name "*.png" >>${TEMP_FILE}
while read line; do
{
resolution=$(file "${line}" | awk -F ',' '{print $2}')
width=$(echo ${resolution} | awk '{print $1}')
[[ ${width} != $1 ]] && continue
height=$(echo ${resolution} | awk '{print $3}')
if [[ ${height} == $2 ]]; then
echo ${line}
fi
} &
done <${TEMP_FILE}
rm ${TEMP_FILE}
总之希望有大佬指点一下怎么优化这个脚本!万分感谢!!!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.