最近工信部要检查实名制,于是上周就有个需求,要求把服务器上的几个文件夹下的照片按照一定格式进行处理。初接到这个任务,我茫然的在想着用java好不好整,还没开始思路,被同事打断说用shell处理,效率高。我之前没接触过shell,只知道那是类似linux命令行的一种脚本语言。
不说了,下面记录下历程。
首先把需求进行分解,先区分出目标文件,在不能损坏原文件情况下(原文件路径还有讯息有程序需要调用),需要复制出去再做处理、复制目的地,应该是项目外的一个文件夹下,
1、在根目录下创建文件夹:pwd显示当前目录;mkdir zhr;
2、在原文件所在目录下执行:区分出文件:ls -l *.jpg;
3、在原文件所在目录下执行:复制这些文件去目的文件夹:cp *.jpg /home/webapp/zhr;
4、在生成的新目录下:删除非目标文件:ls|grep WO|xargs rm -rf (删除文件名带'WO'的文件);
5、在生成的新目录下:汇总下多少目标文件:ls |wc -l;
------ 然后就是写xxx.sh 这是可执行脚本,以 #!/bin/bash 开头。通过./xxx.sh来执行;
1、在生成的新目录下:首先是创建test.sh:touch test.sh;
2、在生成的新目录下:对文件进行赋权:chmod 777 test.sh;
3、在生成的新目录下:进入文件:vi test.sh;
4、在生成的新目录下:单击'i'进入编辑模式:(insert) ;
以下这个脚本,当然不是我写的辣,目前还在捉摸着其中的缘由
#!/bin/bash
for file in $(ls *.jpg)
do
path1=`echo $file|cut -c 1-17`;
echo $path1;
mypath=`echo $file|cut -c 4-11`;
echo $mypath;
path2=$mypath"_RetentionPhotos_76";
echo $path2;
path3="./"${path2};
if [ ! -d $path3 ]; then
mkdir "$path3";
fi
cd "$path3";
pwd;
city=`echo $file|cut -c 1-3`;
echo $city;
if [ ! -d $city ]; then
mkdir "$city";
fi
cd ..;
pwd;
filename="WO_"$path1"_17.jpg";
cp $file $path3"/"$city"/"$filename;
done
在生成的新目录下:编辑完后按'Esc'进入命令模式;
在生成的新目录下:输入':wq' 保存退出。(当输入:q是不保存的退出)。
在生成的新目录下:执行:find -name "*.jpg"|wc -l 可以查到有多少个目标文件,会发现比原来高一倍
在生成的新目录下:此时:当前的文件目录下,不仅仅有生成的目录,还有原文件,需要删掉原文件:rm -rf *.jpg
再执行:find -name "*.jpg"|wc -l 就恢复了正常。