亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標(biāo)題:
bash 下使用 cp 命令的 --parents 參數(shù) 實現(xiàn)遞歸拷貝 (付遞歸刪除)
[打印本頁]
作者:
ailms
時間:
2013-07-24 10:18
標(biāo)題:
bash 下使用 cp 命令的 --parents 參數(shù) 實現(xiàn)遞歸拷貝 (付遞歸刪除)
本帖最后由 ailms 于 2013-07-24 11:03 編輯
原文地址 :
http://blog.ailms.me/2013/07/23/ ... d-del.html#more-607
把腳本部分改為文本了,另外有同學(xué)說用 rsync 可以實現(xiàn)。是的,用 rsync 更方便,不過這個是另外一個實現(xiàn)方式而已,我的主要目的是說明 cp 命令的
--parents
參數(shù)
今天一前同事在 QQ 上問如何實現(xiàn)將 A 目錄下的某個子目錄(例如 A/sub1/sub2/sub3/file1) 拷貝到目錄 B ,并保持目錄結(jié)構(gòu)。
王XX 17:35:47
我現(xiàn)在要查詢一個目錄,有很多層,找到最后一層,把路徑返回來
王XX 17:35:59
最后一層可能是目錄,也可能是文件
boblin 17:37:01
有沒有截圖啊,這個不是很好理解。你只要最后一層嗎?
王XX 17:38:20
需求是這樣的,現(xiàn)在有兩個目錄,我要把一個目錄文件拷貝到另外一個目錄里,層次和原目錄不變
王XX 17:38:29
刪除也按照原目錄刪除
boblin 17:39:15
知道你意思了,就是你想 cp 文件,同時保留目錄結(jié)構(gòu)是把?
王XX 17:39:55
對
這個需求本身并不難,可能大部分人想到的就是對原路徑稍微做下處理,截取目錄部分,然后作為參數(shù)傳給 mkdir -p 。然后再 cp 文件。
這個并不是不可以,但略顯麻煩,可以 有更簡單的做法,就是
#!/bin/bash
srcDir=$(readlink -e -f $1)
dstDir=$(readlink -e -f $2)
(
if [ "$3" = "update" ] ; then
cd $srcDir && find . -type f | xargs -n 1 -i cp -u -v --parents {} $dstDir
else
cd $srcDir && find . -type f | xargs -n 1 -i cp -v --parents {} $dstDir
fi
)
復(fù)制代碼
效果如下
既然有遞歸拷貝,但自然要有遞歸刪除了。同樣很簡單
下面是原始目錄的內(nèi)容。要將 dstdir/ 目錄下的內(nèi)容變成跟 srcdir 一樣
#!/bin/bash
srcDir=$(readlink -f -e $1)
dstDir=$(readlink -f -e $2)
delList=$(join -v 2 <(cd $srcDir ; find . | sort) <(cd $dstDir ; find . |sort) | awk '{print $0,length($0)}' | sort -k2,2rn | awk '{print $1}')
if [ -n "$delList" ] ; then
cd $dstDir
while read name ; do
if [ -f $name ] ; then
rm -v $(readlink -f -e $name)
elif [ -d $name ] ; then
rmdir -v $(readlink -f -e $name)
fi
done <<< "$delList"
else
echo "nothing to del"
fi
復(fù)制代碼
效果如下
作者:
WilliBhamlll
時間:
2013-07-24 10:37
謝謝分享!
作者:
代號:軍刀
時間:
2013-07-24 10:41
用rsync不就可以很容易的可以實現(xiàn)
作者:
zooyo
時間:
2013-07-24 10:45
提示:
作者被禁止或刪除 內(nèi)容自動屏蔽
作者:
ailms
時間:
2013-07-24 10:52
回復(fù)
3#
代號:軍刀
是的,rsync 也可以,這只是一個 bash 的例子
作者:
blackold
時間:
2013-07-24 10:52
搞復(fù)雜了吧。
另外,建議貼文本。
作者:
blackold
時間:
2013-07-24 10:54
謝謝分享!
作者:
Potato_June
時間:
2013-07-24 15:04
不明覺厲。!
作者:
JeremyTOJ
時間:
2013-07-24 15:48
謝謝樓主分享,我一般用tar 命令來干這事,似乎速度也挺快
tar c $(find /path/to/src/dir -type f ) | tar x -C /path/to/dest/dir
復(fù)制代碼
作者:
davidbeckham921
時間:
2013-07-24 16:40
不明覺厲!
作者:
linux_kaige
時間:
2013-07-24 17:02
本帖最后由 linux_kaige 于 2013-07-24 17:03 編輯
我就不明白了,cp -r ,rm -r 不行嗎??
作者:
ailms
時間:
2013-07-24 19:30
回復(fù)
11#
linux_kaige
主要是保持目錄結(jié)構(gòu),cp -r 只能拷貝葉子節(jié)點,中間的子目錄是不會自動創(chuàng)建的
作者:
ailms
時間:
2013-07-24 19:30
回復(fù)
9#
JeremyTOJ
這也是一種方法
還有就是前面說的直接 rsync 兩個本地目錄
作者:
linux_kaige
時間:
2013-07-25 10:22
回復(fù)
12#
ailms
可以的。。。hava a try。
作者:
ailms
時間:
2013-07-26 21:23
回復(fù)
14#
linux_kaige
我要的是保持目錄結(jié)構(gòu)。-r 是對目錄有效,對文件無效
bob@wordpress:~$ cp -r src/level1/level2/level3/file5 dst/sub1/sub2/sub3/ -v
`src/level1/level2/level3/file5' -> `dst/sub1/sub2/sub3/file5'
bob@wordpress:~$
復(fù)制代碼
作者:
linux_kaige
時間:
2013-07-29 09:15
回復(fù)
15#
ailms
將 A 目錄下的某個子目錄(例如 A/sub1/sub2/sub3/file1) 拷貝到目錄 B ,并保持目錄結(jié)構(gòu)。
[root@yang test]# pwd
/root/test
[root@yang test]# mkdir -pv ./a/b/c/d/
mkdir: 已創(chuàng)建目錄 “./a”
mkdir: 已創(chuàng)建目錄 “./a/b”
mkdir: 已創(chuàng)建目錄 “./a/b/c”
mkdir: 已創(chuàng)建目錄 “./a/b/c/d”
[root@yang test]# cd ./a/b/c/d/
[root@yang d]# cat <<ok>> file1
> this is a test.
> ok
[root@yang d]# cd -
/root/test
[root@yang test]# mkdir -pv q/w
mkdir: 已創(chuàng)建目錄 “q”
mkdir: 已創(chuàng)建目錄 “q/w”
[root@yang test]# cp -R ./a ./q/w/
[root@yang test]# cat q/w/a/b/c/d/file1
this is a test.
[root@yang test]#
將 A 目錄下的某個子目錄(例如 A/sub1/sub2/sub3/file1) 拷貝到目錄 B ,并保持目錄結(jié)構(gòu)。
找到最外層目錄A,然后cp -R ./A /B 就ok了。
作者:
ailms
時間:
2013-07-29 18:21
回復(fù)
16#
linux_kaige
是的,但這樣還不如直接用 cp --parents , 省去自己 mkdir -p
這個問題就到此結(jié)束把
作者:
cao627
時間:
2013-07-29 19:32
@ailms
@linux_kaige
cp -R ./A /B 是將./A目錄的整個目錄樹復(fù)制到/B
cp --parents ./A/tree1/file /B 是將./A目錄的./A/tree1/file這一支分支復(fù)制到/B
如果樓主只要將./A/tree1/file 這一分支復(fù)制到/B,并且./A下還有其他分支的話 cp -R ./A /B 不符合要求。
如果樓主就是要將文件file所在樹的A節(jié)點以下的所有分支都復(fù)制到/B ,那么 cp -R ./A /B 正好符合要求。
作者:
linux_kaige
時間:
2013-07-30 18:17
回復(fù)
18#
cao627
是的,不過我說的那個,也不用mkdir啊,開始看到這個帖子覺得很怪,感覺很簡單一問題,咋整出復(fù)雜的腳本出來呢
作者:
cao627
時間:
2013-07-30 22:22
@linux_kaige
是的 ,17樓沒有仔細看你16的栗子,想當(dāng)然了。
歡迎光臨 Chinaunix (http://www.72891.cn/)
Powered by Discuz! X3.2