有人能帮我解决一个相对复杂的命令行文件匹配模式吗?
我在目录中有如下文件:
1.png
1_thumb.png
1-1.png
1-1_thumb.png
1-2.png
1-2_thumb.png
2.png
2_thumb.png
2-1.png
2-1_thumb.png
3.png
3_thumb.png
3-1_thumb.png
我想列出所有没有同名副本的文件-1
。因此,在上面的例子中,结果将是3.png
。
注意:如果有帮助的话,该文件及其带有“-1”的副本将具有相同的文件大小。
有人可以建议如何做到这一点吗?
答案1
假设所有文件-n
都是副本,并且您也不想要缩略图,则这在 KornShell (ksh) 中有效,在带有extglob
选项集的 Bash 中也有效(shopt -s extglob
):
for f in !(*_thumb.png|*-[1-9].png); do
g=${f%.png}-1.png
test -f $g || echo $f
done
答案2
如果只有“-1”确定它是副本,那么您也没有 2-1.png 或 2-1_thumb.png 文件的副本。如果这是您的匹配标准,并且您还想测试缩略图,您可以这样做
for i in `ls |grep -v "\-1" | cut -f1 -d.`; do
if `echo $i | grep thumb > /dev/null`; then
test -f `echo $i.png | sed 's/_/-1_/g'` || echo $i.png;
else
test -f $i-1.png || echo $i.png;
fi;
done
否则,如果竖起大拇指不算数,KAK 的答案应该合适