如果结束字符不匹配,则删除文件

Delete File, If End Characters Don't Match

我正在尝试从 /Dir1 中删除 /Dir2 中不存在的文件。问题是前几个字符匹配,但最后几个不匹配。例如。

/Dir1
abc_def.png
xyz_xyz.png

/Dir2
abc_ghi.png

所以只要 "abc" 匹配,即使最后几个字符不同,我也不想删除文件。我要删除的唯一文件是 xyz.png,因为它不存在于 /Dir2 中。我该怎么做?

假设你想匹配第一个下划线之前的部分文件名(如你的示例),你可以使用此代码:

cd /Dir1

for f in *_*; do
    [[ -f /Dir2/"${f%%_*}"* ]] || echo rm "$f"
done

满意后,删除 rm 之前的 echo