![如何使用 zsh 按文件名区分 2 个文件夹,但仅区分文件名的开头?](https://linux22.com/image/183107/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20zsh%20%E6%8C%89%E6%96%87%E4%BB%B6%E5%90%8D%E5%8C%BA%E5%88%86%202%20%E4%B8%AA%E6%96%87%E4%BB%B6%E5%A4%B9%EF%BC%8C%E4%BD%86%E4%BB%85%E5%8C%BA%E5%88%86%E6%96%87%E4%BB%B6%E5%90%8D%E7%9A%84%E5%BC%80%E5%A4%B4%EF%BC%9F.png)
所以我有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}