目录结构如下:
/data/backup/ ├── 20150508 │ ├── access_20150508.gz │ └── access_20150508.gz.1 ├── 20150509 │ ├── access_20150509.gz │ └── access_20150509.gz.1 ├── 20150510 │ ├── access_20150510.gz │ └── access_20150510.gz.1
需求,将所有的.1结尾的文件移动到/data/backup1/目录下,目录结构不能变,也就是说/data/backup1下也是以日期命名的目录,文件移动到对应目录下面,并且重命名去掉.1
问题重现:
通过一个脚本创建实验需要的文件,脚本内容如下:
#!/bin/sh for i in `seq 20` do dir_name=$(date +%Y%m%d -d "$i days ago") dst_dirname=/data/backup/$dir_name mkdir -p $dst_dirname cd $dst_dirname #为区分移动后的同名文件,分别写入1和2 echo "1"> access_${dir_name}.gz echo "2"> access_${dir_name}.gz.1 done
解决方法:
还是通过一个脚本来实现:
#!/bin/sh for file in `find /data/backup/ -name *.gz.1` do dir_name=`echo $file |awk -F/ '{print $4}'` #提取出目录名 dst_dir_name=/data/backup1/$dir_name/ mkdir -p $dst_dir_name #创建要移动到的目录 mv $file $dst_dir_name cd $dst_dir_name rename gz.1 gz ./* #因为当前目录下只有一个.gz.1的文件,所以可以用*匹配 done
执行脚本后查看结果:
[root@c66-3 data]# tree /data/backup/ /data/backup/ ├── 20150508 │ └── access_20150508.gz ├── 20150509 │ └── access_20150509.gz ├── 20150510 │ └── access_20150510.gz ... [root@c66-3 data]# grep -r 1 /data/backup/ /data/backup/20150524/access_20150524.gz:1 /data/backup/20150514/access_20150514.gz:1 /data/backup/20150519/access_20150519.gz:1 ... [root@c66-3 data]# tree /data/backup1/ /data/backup1/ ├── 20150508 │ └── access_20150508.gz ├── 20150509 │ └── access_20150509.gz ├── 20150510 │ └── access_20150510.gz ... [root@c66-3 data]# grep -r 2 /data/backup1/ /data/backup1/20150524/access_20150524.gz:2 /data/backup1/20150514/access_20150514.gz:2 /data/backup1/20150519/access_20150519.gz:2 ...
通过结果可以看出,所有/data/backup/目录下内容是2的.gz.1的文件都已经成功移动到/data/backup1/目录下,并且目录结构保持不变。