SHELL编程练习-复制指定文件(保持文件所在目录结构)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SHELL编程练习-复制指定文件(保持文件所在目录结构)相关的知识,希望对你有一定的参考价值。

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效果
原始目录文件:

[[email protected] 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

复制后的路径文件:

[[email protected] 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具体实现

[[email protected] ~]# 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

以上是关于SHELL编程练习-复制指定文件(保持文件所在目录结构)的主要内容,如果未能解决你的问题,请参考以下文章

IO流的练习3 复制多级文件夹下的指定文件并改名

请教如何获得一个shell文件所在的目录

Linux中编写一个shell脚本将指定目录中的文件的文件全名改为大写,但是命令执行完,shell

shell编程练习

HDFS编程练习

linux c 查看当前目录下是不是有指定文件