zsh globbing - 查找具有重复文件名字符串的文件

Cor*_*ris 2 command-line shell zsh

我有一个文件名格式为 的文件目录<num1>v<num2>.txt。我想找到所有<num1>重复的文件。当发现重复项时,我们应该删除那些较小的<num2>

这可能吗?我可以轻松编写一个 python 脚本来处理这个问题,但我认为这可能是内置 zsh 功能的一个很好的应用程序。

例子

在以下文件列表中,前三个文件有重复的<num1>部分。同样,第四个和第五个是重复的。

012345v1.txt
012345v2.txt
012345v3.txt
3333v4.txt
3333v7.txt
11111v11.txt
Run Code Online (Sandbox Code Playgroud)

我想最终得到包含以下内容的目录

012345v3.txt
3333v7.txt
11111v11.txt
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 5

你可以这样做:

files=(<->v<->.txt(n))
typeset -A h
for f ($files) h[${f%%v*}]=$f
keep=($h)
echo rm ${files:|keep}
Run Code Online (Sandbox Code Playgroud)

echo如果高兴就删除)

  • <->:任何数字序列(<x-y>没有指定界限的全局运算符)
  • (n): 数字排序
  • ${f%%v*}:标准/ksh 贪婪模式从末尾剥离。
  • ${files:|keep}:数组减法。