1. 目的
将 / root 目录下的所有大于 1M(可自定义) 的文件拷贝到 /tmp/BakDir(可自定义) 目录, 需要保持目录结构
例如 /root/reed.file 文件大小为 12M, 则会被拷贝到 /tmp/BakDir/root/ 路径位置
2. 难度
需连同文件所在的路径一起拷贝
3. 知识点
3.1 文件和目录的操作 (dirname 命令)
3.2 文件查找操作 (find 命令)
3.3SHELL 编程基础
4. 思路与具体实现
4.1 思路
1) 先查找指定的文件;
2) 根据查找到的文件, 输出其所在路径;
3) 创建路径, 复制文件
4.2 效果
原始目录文件:
- [root@reedoracle BakDir]# find /root -size +1M |xargs ls -lh
- -rw-r--r-- 1 root root 4.7M Jan 17 2017 /root/ansible-packages/ansible-2.2.1.0-1.el6.noarch.rpm
- -rw-r--r-- 1 root root 1.5M Jul 3 2011 /root/ansible-packages/python-babel-0.9.4-5.1.el6.noarch.rpm
- -rw-r--r-- 1 root root 7.5M Feb 3 2017 /root/ansible-packages.tar.gz
- -rw------- 1 root root 6.3M Mar 14 2017 /root/.cache/pip/http/6/b/5/7/b/6b57b626d79b36c0d0749210d43211130a56666ce3959ca91a518127
- -rw-r--r-- 1 root root 13M Feb 6 13:54 /root/dir1/dir2/file2
- -rw-r--r-- 1 root root 15M Feb 6 13:55 /root/dir1/dir3/file3
- -rw-r--r-- 1 root root 23M Feb 6 13:54 /root/dir1/file1-1
- -rwxr-xr-x 1 root root 3.7M Nov 18 03:31 /root/nginx-1.12.2/objs/nginx
- -rw-r--r-- 1 root root 2.0M Nov 18 02:53 /root/pcre-8.40.tar.gz
- -rw-r--r-- 1 root root 1.2M Mar 8 2017 /root/PI.DAT
复制后的路径文件:
- [root@reedoracle BakDir]# find /tmp/BakDir -size +1M |xargs ls -lh
- -rw-r--r-- 1 root root 4.7M Feb 12 12:19 /tmp/BakDir/root/ansible-packages/ansible-2.2.1.0-1.el6.noarch.rpm
- -rw-r--r-- 1 root root 1.5M Feb 12 12:19 /tmp/BakDir/root/ansible-packages/python-babel-0.9.4-5.1.el6.noarch.rpm
- -rw-r--r-- 1 root root 7.5M Feb 12 12:19 /tmp/BakDir/root/ansible-packages.tar.gz
- -rw------- 1 root root 6.3M Feb 12 12:19 /tmp/BakDir/root/.cache/pip/http/6/b/5/7/b/6b57b626d79b36c0d0749210d43211130a56666ce3959ca91a518127
- -rw-r--r-- 1 root root 13M Feb 12 12:19 /tmp/BakDir/root/dir1/dir2/file2
- -rw-r--r-- 1 root root 15M Feb 12 12:19 /tmp/BakDir/root/dir1/dir3/file3
- -rw-r--r-- 1 root root 23M Feb 12 12:19 /tmp/BakDir/root/dir1/file1-1
- -rwxr-xr-x 1 root root 3.7M Feb 12 12:19 /tmp/BakDir/root/nginx-1.12.2/objs/nginx
- -rw-r--r-- 1 root root 2.0M Feb 12 12:19 /tmp/BakDir/root/pcre-8.40.tar.gz
- -rw-r--r-- 1 root root 1.2M Feb 12 12:19 /tmp/BakDir/root/PI.DAT
4.3 具体实现
- [root@reedoracle ~]# cat CpFiles.sh
- #!/bin/bash
- #Func:cp files include directory
- #Author:reed
- . /etc/profile
- SourcePath="/root"
- DestPath="/tmp/BakDir"
- #mkdir backup directory
- [ ! -d $DestPath ] && mkdir -p $DestPath
- Func_CpFiles()
- {
- for FileList in $(find $SourcePath -size +1M);do
- #mkdir
- [ ! -d ${DestPath}$(dirname $FileList) ] && mkdir -p ${DestPath}$(dirname $FileList)
- #copy
- cp -rf $FileList ${DestPath}$(dirname $FileList)
- done
- }
- Func_CpFiles
来源: http://www.bubuko.com/infodetail-2497147.html