![如何循环压缩文件并将它们移动到不同的目录?](https://linux22.com/image/94852/%E5%A6%82%E4%BD%95%E5%BE%AA%E7%8E%AF%E5%8E%8B%E7%BC%A9%E6%96%87%E4%BB%B6%E5%B9%B6%E5%B0%86%E5%AE%83%E4%BB%AC%E7%A7%BB%E5%8A%A8%E5%88%B0%E4%B8%8D%E5%90%8C%E7%9A%84%E7%9B%AE%E5%BD%95%EF%BC%9F.png)
我想根据动态文件名压缩文件。我的文件名为: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 结尾)