使用Bash Shell對(duì)目錄中的文件實(shí)現(xiàn)遞歸式拷貝
前言
今天工作中遇到了一個(gè)問(wèn)題,如果將目錄A中的文件拷貝到目錄B中(前提目錄B沒(méi)有該文件),并保持文件在目錄A的結(jié)構(gòu)。項(xiàng)目重點(diǎn)如下:
需要在目錄B中保持文件在目錄A中的結(jié)構(gòu)。假設(shè)A目錄文件 A/test/1.txt,轉(zhuǎn)移到目錄B中應(yīng)該是B/test/1.txt。同時(shí)還需要考慮目錄B中是否存在test目錄,多級(jí)目錄就要考慮遞歸了。(還好,bash shell里寫(xiě)個(gè)目錄遞歸遍歷還是比較簡(jiǎn)單的。)
需要考慮A中文件是否在B中已經(jīng)存在同名文件,如果存在,則不需要拷貝。
項(xiàng)目需求示例圖如下:
實(shí)現(xiàn)
項(xiàng)目需求有了,知道設(shè)計(jì)到遞歸,代碼就很好寫(xiě)了。這里給出一個(gè)demo示例,供大家參考。
#!/bin/bash function recursive_copy_file() { dirlist=$(ls $1) for name in ${dirlist[*]} do if [ -f $1/$name ]; then # 如果是文件,并且$2不存在該文件,則直接copy if [ ! -f $2/$name ]; then cp $1/$name $2/$name fi elif [ -d $1/$name ]; then # 如果是目錄,并且$2不存在該目錄,則先創(chuàng)建目錄 if [ ! -d $2/$name ]; then mkdir -p $2/$name fi # 遞歸拷貝 recursive_copy_file $1/$name $2/$name fi done } source_dir="/tmp/test/system" dest_dir="/tmp/test/systemback" recursive_copy_file $source_dir $dest_dir
相關(guān)文章
淺析linux下如何用腳本自動(dòng)發(fā)送文本mail郵件
這篇文章主要是介紹如何linux下通過(guò)腳本自動(dòng)發(fā)送文本mail郵件,特分享下,方便需要的朋友2013-05-05bash 循環(huán)中變量作用范圍的問(wèn)題分析
大家在bash編寫(xiě)中,經(jīng)常需要用到循環(huán),但循環(huán)中變量作用范圍的問(wèn)題有些朋友不是很懂,這里簡(jiǎn)單分享下,方便需要的朋友2013-01-01linux數(shù)據(jù)庫(kù)備份并通過(guò)ftp上傳腳本分享
這篇文章主要介紹了linux數(shù)據(jù)庫(kù)備份并通過(guò)ftp上傳腳本,腳本還可以備份網(wǎng)站,需要的朋友可以參考下2014-03-03關(guān)于ssh連不上問(wèn)題的解決方法(必看)
下面小編就為大家?guī)?lái)一篇關(guān)于ssh連不上問(wèn)題的解決方法(必看)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03獲取站點(diǎn)的各類(lèi)響應(yīng)時(shí)間(dns解析時(shí)間,響應(yīng)時(shí)間,傳輸時(shí)間)
有時(shí)候?yàn)榱藴y(cè)試網(wǎng)絡(luò)情況,需要返回每個(gè)階段的耗時(shí)時(shí)間,比如DNS解析耗時(shí),建立連接所消耗的時(shí)間,從建立連接到準(zhǔn)備傳輸所使用的時(shí)間,從建立連接到傳輸開(kāi)始所使用的時(shí)間,整個(gè)過(guò)程耗時(shí),下載的數(shù)據(jù)量,下載速度,上傳數(shù)據(jù)量,上傳速度等等2014-03-03