如何使用 zsh 按文件名区分 2 个文件夹,但仅区分文件名的开头?

如何使用 zsh 按文件名区分 2 个文件夹,但仅区分文件名的开头?

所以我有2个文件夹,里面有很多类似的文件,并且版本写在文件名中,所以我想做的是检查文件名的开头是否相同(例如“sample-1.12”和“sample-1.13” “应该被视为相同)。我只需要在相反的文件夹中查找没有类似命名文件的文件。

要检查的文件名的初始部分以第一个破折号、下划线或方括号结束。

答案1

您可以使用${a:|b}数组减法运算符:

dir1=/some/dir
dir2=/some/other/dir

a=($dir1/*[[_-]*(N:t)) # [t]ail of every file with at least one -, [ or _
b=($dir2/*[[_-]*(N:t))

a=(${a%%[[_-]*}) # strip [*, _* or -* suffix
b=(${b%%[[_-]*})

print -r in $dir1 and not in $dir2:
print -rC1 -- ${a:|b}
print -r in $dir2 and not in $dir1:
print -rC1 -- ${b:|a}

相关内容