如何循环压缩文件并将它们移动到不同的目录?

如何循环压缩文件并将它们移动到不同的目录?

我想根据动态文件名压缩文件。我的文件名为:ClientNames

CODE, Client Name
1111, ABC
1231, XYZ
1211, APT
1561, OPT

我的文件名是:MAA.TRD.1111.2016.20.09.csv(文件名.代码.年份.日期.月份.csv)我在一个目录中有多个具有不同代码的文件。

每次我需要检查代码时,从 ClientNames 文件中获取其客户端名称并使用名称压缩该文件 - (文件名:MAA.TRD.1111.2016.20.09.csv zip 文件名:ABC.20162009.csv; MAA.TRD.1211.2016 .20.09.csv zip 文件名应为:APT.20162009.csv 等)

我想设计一个循环,它将逐个文件放入并压缩,重命名。

我的代码是:

FILES=MAA.TRD*.csv

for file in ${FILES}
    do
    ls -lrt MAA.TRD*.csv | cut -d '.' -f 3 > $SCRIPT/LogfileCODE
    cd $SCRIPT
    DATE=`date`
    Filename=`grep -Fwf $LogfileCODE $ClientNames | cut -d ',' -f 2`
    ZIPFILENAME="${Filename}_${DATE}"         
    echo " Zipping of file is starting "
    zip -j ${ZIPFILENAME}-$DATE.zip $file           
done 

但我的 for 循环正在将所有文件放在一起。请帮忙。

答案1

1  DATE=$(date '+%Y%m%d')
2
3  for FILE in MAA.TRD*.csv
4  do
5      CODE=$(echo $FILE | cut -d. -f3)
6      CLIENT=$(grep -w $CODE ClientNames | sed 's/^.*, //')
7      NEWFILE=$CLIENT.$DATE.csv
8      mv $FILE $NEWFILE
9      echo " Zipping of $NEWFILE is starting "
10     zip -j $NEWFILE.zip $NEWFILE           
11 done

1 - 设置日期,最好使用这样的格式,其中不会有空格,随意调整到您的喜好

3 - 只需循环目录中的所有文件(这将扩展到与您概述的命名约定匹配的所有文件)

5 - 从文件名中获取代码

6 - 根据当前文件的 CODE 从 ClientNames 获取 CLIENT(此处使用 sed 包括删除逗号后的空格,如果实际上没有空格cut -d, -f2也可以) - 这假设 ClientNames 在 CWD 中,使用如有必要,请提供完整路径

7 - 构建新文件名以便以后重复使用

8 - 将文件重命名为您的新名称

10 - 压缩文件(您不希望压缩文件以 .csv 结尾)

相关内容