假设我有许多 CSV 文件位于
现在我想将每个以相同前缀定义的三个文件压缩到同一个zip文件中: 换句话说,创建
但是,它不起作用,有任何帮助,请!谢谢!
/home/user/test
。123_24112021_DONG.csv
122_24112021_DONG.csv
145_24112021_DONG.csv
123_24112021_FINA.csv
122_24112021_FINA.csv
145_24112021_FINA.csv
123_24112021_INDEM.csv
122_24112021_INDEM.csv
145_24112021_INDEM.csv
如您所见,所有文件都有三个唯一的前缀:
145
123
122
我需要根据前缀创建zip文件,每个zip文件包含一个或多个csv文件。需要注意的是,实际上我不知道每个前缀下有多少个csv文件,这只是一个例子(每个前缀下有3个csv文件)。 我编写了一段代码,从Bash表中的所有csv文件名中提取前缀:
for entry in "$search_dir"/*
do
# extract csv files
f1=${entry##*/}
echo $f1
# extract prefix of each file
f2=${f1%%_*}
echo $f2
# add prefix in table
liste_sirets+=($f2)
done
# get uniq prefix in unique_sorted_list
unique_sorted_list=($(printf "%s\n" "${liste_sirets[@]}" | sort -u ))
echo $unique_sorted_list
这将产生以下结果:
145
123
122
现在我想将每个以相同前缀定义的三个文件压缩到同一个zip文件中: 换句话说,创建
123_24112021_M2.zip
,其中包含以下内容:123_24112021_DONG.csv
123_24112021_FINA.csv
123_24112021_INDEM.csv
我开发了一个循环,它会关注本地路径中每个csv文件的前缀名称,然后压缩所有具有相同前缀名称的文件:
并且 122_24112021_M2.zip
145_24112021_M2.zip
...
for i in $unique_sorted_list
do
for j in "$search_dir"/*
do
if $(echo $j| cut -d'_' -f1)==$i
zip -jr $j
done
但是,它不起作用,有任何帮助,请!谢谢!