SHELL編程練習-復制指定文件(保持文件所在目錄結構)
阿新 • • 發佈:2018-02-13
file 文件 同文件 amp bash don etc shel done cep 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 目錄下的所有大於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
SHELL編程練習-復制指定文件(保持文件所在目錄結構)