点击排行
|
评论排行
|
14
Jul
帮朋友写的一个脚本
要求:
1、目录/FTP/下有很多用户目录,分别是某一个公司的英文缩写,FTP目录结构为
/FTP/AAA/DOWNLOAD
/FTP/BBB/DOWNLOAD
......
2、在每一个公司的DOWNLOAD下,每天会有很多文本文件上传过来,但为了便于数据统计,导入到XML乃至数据库中,需要对上传的文件进行批量重命名,命名的格式如:CCO_AAA_SZ2008071401_SZ_V04.test1.txt,其中2008071401是文件修改日期。
3、文件内容如:
重新命名文件之后,需要对每个文件的内容进行修改,修改要求如下:
以|为分隔符分割字段,删除文件的第一行,将剩下内容每一行|之前的字符删除(包括|符号),然后将|替换成||,最后判断剩下的内容,如果剩下文件内容的第一行不是以13开头,删除!
初步代码如下,还不完善,有不妥的地方希望大家批评指正。
1、目录/FTP/下有很多用户目录,分别是某一个公司的英文缩写,FTP目录结构为
/FTP/AAA/DOWNLOAD
/FTP/BBB/DOWNLOAD
......
2、在每一个公司的DOWNLOAD下,每天会有很多文本文件上传过来,但为了便于数据统计,导入到XML乃至数据库中,需要对上传的文件进行批量重命名,命名的格式如:CCO_AAA_SZ2008071401_SZ_V04.test1.txt,其中2008071401是文件修改日期。
3、文件内容如:
引用
AAA公司|上传数据|A经理
0012|560|jack|2006
1323|7787|rose|2008
abcd|yes|35|88
0012|560|jack|2006
1323|7787|rose|2008
abcd|yes|35|88
重新命名文件之后,需要对每个文件的内容进行修改,修改要求如下:
以|为分隔符分割字段,删除文件的第一行,将剩下内容每一行|之前的字符删除(包括|符号),然后将|替换成||,最后判断剩下的内容,如果剩下文件内容的第一行不是以13开头,删除!
初步代码如下,还不完善,有不妥的地方希望大家批评指正。
#!/bin/bash
#
for path in /FTP/*/DOWNLOAD ; do
cd $path
compay=`pwd | awk -F/ '{print $(NF-1)}'`
ls -l $1 | grep ^[^d] | awk '{print $9}' | sed -e '/^$/d' | while read name;do
if [ ! `echo $name | awk '/^CCO/'` ]; then
modifytime=`ls -l $name --time-style +%Y%m%d | awk '{print $6}'`
newname=CCO_"$compay"_SZ"$modifytime"01_SZ_V04."$name".txt
echo "rename $path/$name to $path/$newname ..."
mv $path/$name $path/$newname
echo "modify the content of $newname"
sed -i '1d; s/[^|]*|//; s/|/||/g' $newname
sed -i '1{/^13/!d}' $newname
fi
done
done
#
for path in /FTP/*/DOWNLOAD ; do
cd $path
compay=`pwd | awk -F/ '{print $(NF-1)}'`
ls -l $1 | grep ^[^d] | awk '{print $9}' | sed -e '/^$/d' | while read name;do
if [ ! `echo $name | awk '/^CCO/'` ]; then
modifytime=`ls -l $name --time-style +%Y%m%d | awk '{print $6}'`
newname=CCO_"$compay"_SZ"$modifytime"01_SZ_V04."$name".txt
echo "rename $path/$name to $path/$newname ..."
mv $path/$name $path/$newname
echo "modify the content of $newname"
sed -i '1d; s/[^|]*|//; s/|/||/g' $newname
sed -i '1{/^13/!d}' $newname
fi
done
done



作者:
Linux 下批量更改文
查找某时间段修改的文件
