作为一个有收藏癖的lsp,特别喜欢收集各种美图和壁纸,可能一不小心就收集了上万张。虽然收集了很多壁纸,但是里面满足屏幕(比例和分辨率)要求的可能并不多。大量的图片带来的后果是我很难从中间选出心仪的壁纸,同时也不想删除好不容易收集来的图片。于是我写了一个shell脚本用来筛选满足要求的壁纸。
脚本主要实现以下目标:
支持最高\最低分辨力限制
支持宽高比限制
将所有文件用md5重命名,避免重复收集
话不多说直接放代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
#!/bin/bash
init() {
# 图片最小宽度
readonly min_width=1920
# 图片最大宽度,0代表无限制
readonly max_width=0
# 图片最小高度
readonly min_height=1080
# 图片最大高度,0代表无限制
readonly max_height=0
# 宽高比的宽容度,即 (1-radio)*标准宽高比<高度/宽度<(1+radio)*标准宽高比
readonly radio="0.15"
# 宽高比的上界
readonly upperbound="$min_width/$min_height*(1+$radio)"
# 宽高比下界
readonly lowerbound="$min_width/$min_height*(1-$radio)"
# 垃圾目录名,不符合要求的图片会被移动到新建目录
readonly trash_dir="trash"
# 输出调试信息
readonly debug=0
# 创建垃圾目录
mkdir -p $trash_dir
}
check_if_image_well() {
width=$1
height=$2
if [ "$width" -lt $min_width ] || [ "$height" -lt $min_height ]; then
# 不满足最低宽高限制
`test "$width" -lt $min_width` && printD $width
`test "$height" -lt $min_height` &&printD $height
return 0
elif [ "$max_width" -gt 0 -a "$width" -gt $max_width ] ||
[ "$max_height" -gt 0 -a "$height" -gt $max_height ]; then
# 不满足最高寬高限制
`test "$max_width" -gt 0 -a "$width" -gt $max_width` && printD "$width"
`test "$max_height" -gt 0 -a "$height" -gt $max_height` && printD "$height"
return 0
fi
printD "start check radio"
printD $width
printD $height
printD "$width/$height>=$lowerbound"
printD "$width/$height<=$upperbound"
if [ $(echo "scale=2;$width/$height>=$lowerbound" | bc) -eq 1 ] && [ $(scale=2;echo "$width/$height<=$upperbound" | bc) -eq 1 ]; then
# 满足所有限制
return 1
fi
printD "$(echo "scale=2;$width/$height>=$lowerbound" | bc)"
printD "$(echo "scale=2;$width/$height<=$upperbound" | bc)"
return 0
}
printD(){
# 打印调试信息
if [ $debug == 1 ];then
echo "$1"
fi
}
main() {
for file in $(ls *.{png,jepg,jpg} 2> /dev/null); do
printD "=============$file==================="
base=$(md5sum "$file" | awk '{print $1}')
# echo $sum
# echo -- "${file%%.*}" "${sum%% *}.${file##*.}"
# rename -o --verbose -n ${file%%.*} $base $file
# echo -- "${file%%.*}" "${sum%% *}.${file##*.}"
out=$(magick identify -format "%[width] %[height]" "$file" 2> /dev/null)
width=$(echo $out|awk '{print $1}')
height=$(echo $out|awk '{print $2}')
printD $width
printD $height
check_if_image_well "$width" "$height"
ret=$?
printD $ret
if [ $ret -eq 1 ]; then
printD "$file "$base.${file##*.}""
#mv -n "$file" ""
mv -n "$file" "$base.${file##*.}"
printD "$file yes"
else
mv $file "./$trash_dir"
printD "$file no"
fi
done
echo 'finished'
}
OLD_IFS=$IFS
IFS=$(echo -en "\n\b")
init
main
IFS=$OLD_IFS
|
使用方式:
默认分辨率为1920*1080,最高像素限制默认关闭,如有需要请修改init()内的内容
1
2
3
4
|
curl https://gist.github.com/wuliaotc/4ff108893777377b0d022d83195fc57d -o run.sh
mv run.sh "待筛选的图片目录"
chmod +x run.sh
./run.sh
|