删除非视网膜显示图像的最快bash脚本是什么(仅当存在@2x.png时才删除正常的“png”?
大多数视网膜显示图像以删除非视网膜显示图像的最快bash脚本是什么(仅当存在@2x.png时才删除正常的“png”?,bash,Bash,大多数视网膜显示图像以@2x.png结尾,通常在同一文件夹中有一个正常的.png。那么,只有在file@2x.png是否存在于同一文件夹中?您可以使用参数替换来检查不带@2x的文件,并删除包含@2x的文件,方法如下: #!/bin/bash while read -r line; do printf "found '%s' -> rm '%s'\n" "${line/@2x}" "$line" # [ -f "${line/@2x}" ] && rm "$
@2x.png
结尾,通常在同一文件夹中有一个正常的.png
。那么,只有在file@2x.png
是否存在于同一文件夹中?您可以使用参数替换来检查不带@2x
的文件,并删除包含@2x
的文件,方法如下:
#!/bin/bash
while read -r line; do
printf "found '%s' -> rm '%s'\n" "${line/@2x}" "$line"
# [ -f "${line/@2x}" ] && rm "$line"
done < <(find "$1" -type f -name "*@2x.png")
(注意:代码要求将$path
作为第一个参数,并且当前注释了rm
,因此您可以在实际尝试删除之前进行测试。在删除有价值的文件之前,始终确保您有备份…)
注意2:您应该在脚本开头添加一个测试,以验证路径的至少1个输入。e、 g:
[ -z "$1" ] && { ## validate at least one argument provided
printf "error: insufficient input, usage: %s path\n" "${0##*/}"
exit 1
}
这样,如果用户(您)未能提供路径
作为参数,您将收到:
$ bash retinadel.sh
error: insufficient input, usage: retinadel.sh path
我非常肯定,如果使用一些复杂的
find-exec
,这是可能的,但我想不出来。不过,这对我的小测试有效:
$ find -maxdepth 1 -name '*@2x.png' | sed 's/@2x//' | xargs echo rm
这将查找当前目录中以@2x.png
结尾的所有文件(-maxdepth 1
),并删除@2x
位并打印rm
和文件名。要实际删除它们,is必须是xargs rm
;为避免出现提示,请使用rm-f
,为谨慎起见,请使用rm-i
这应该做到:
find /path/to/folder -name '*@2.png' -type f -exec bash -c 'f=${0%@2.png}.png; [[ -f $f ]] && echo rm -- "$f"' {} \;
或者,要限制生成的bash
进程的数量:
find /path/to/folder -name '*@2.png' -type f -exec bash -c 'for i; do f=${i%@2.png}.png; [[ -f $f ]] && echo rm -- "$f"; done' _ {} +
请注意,这些命令不会删除任何内容,只是将要执行的rm
命令打印到标准输出。如果您对rm
满意,请删除echo
前面的echo
find /path/to/folder -name '*@2.png' -type f -exec bash -c 'for i; do f=${i%@2.png}.png; [[ -f $f ]] && echo rm -- "$f"; done' _ {} +