我大约有100个文件。
他们被这样命名。
3000_ABCD_XXXXXXX.csv
3000_ABCD_YYYYYYY.csv
3000_ABCD_XYXYZYZ.csv
3000_EFGH_XXXXXXX.csv
3000_EFGH_YYYYYYY.csv
3000_EFGH_XYXYZYZ.csv
3000_IJKL_XXXXXXX.csv
3000_IJKL_YYYYYYY.csv
3000_IJKL_XYXYZYZ.csv
目前,我正在分别压缩每个文件,但是我想根据它们的公共子字符串ABCD.zip
将它们分组,例如将存储
3000_ABCD_XXXXXXX.csv
3000_ABCD_YYYYYYY.csv
3000_ABCD_XYXYZYZ.csv
EFGH.zip
将存储
3000_EFGH_XXXXXXX.csv
3000_EFGH_YYYYYYY.csv
3000_EFGH_XYXYZYZ.csv
等等。
我对Unix / Bash脚本非常陌生。有人能指出我正确的方向吗?
编辑:ABCD
,EFGH
,IJKL
事先不知道。但是,可以保证它们在文件名中的位置和宽度。
与zsh
:
setopt extendedglob
typeset -A a
for f (./*) {
[[ $f = (#b)*_(*)_* ]] &&
a[$match]+=$f$'\0'
}
for z (${(k)a}) {
echo zip ./$z.zip ${(ps:\0:)a[$z]}
}
(echo
如果满意,请删除实际执行此操作)。
使用perl
(从zsh
/bash
或任何其他非类似csh的shell):
perl -e 'for (@ARGV) {push @{$a{$1}}, $_ if (/_(.*)_/s)}
system "echo", "zip", "./$_.zip", @{$a{$_}} for (keys %a)' ./*_*_*
(再次删除"echo",
以实际操作)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句