Linux中拷貝 cp命令中拷貝所有的寫法詳解
今天在編寫一個(gè)腳本的時(shí)候,發(fā)現(xiàn)一個(gè)比較奇怪的問(wèn)題:就是在使用cp拷貝當(dāng)前目錄下所有文件到目標(biāo)目錄的時(shí)候,源和目標(biāo)目錄大小不同。原來(lái)一直沒(méi)有留意有這樣的問(wèn)題,后來(lái)查了些資料,才知道以前一直使用的格式有誤,
一、預(yù)備
cp就是拷貝,最簡(jiǎn)單的使用方式就是:
cp oldfile newfile
但這樣只能拷貝文件,不能拷貝目錄,所以通常用:
cp -r old/ new/
那就會(huì)把old目錄整個(gè)拷貝到new目錄下。注意,不是把old目錄里面的文件拷貝到new目錄,而是把old直接拷貝到new下面,結(jié)果是:
[root@dc5 test]# ll new/ total 4 drwxr-xr-x 2 root root 4096 Dec 15 11:55 old
那如果要保持源文件的所有權(quán)限,可以這樣:
cp -rp old/ new/
-p參數(shù),可以保持權(quán)限、宿主、時(shí)間棧,還可能包括link等;還有更簡(jiǎn)單的,就是用:
cp -a old/new/
-a參數(shù),就等于-dpR。
二、問(wèn)題1
好,我們來(lái)看看這次的問(wèn)題。環(huán)境是:
◎兩個(gè)目錄:old、new,其中old里面有個(gè)三個(gè)內(nèi)容:test1文件、test2目錄,還有就是.test3,這是一個(gè)隱含文件。
[root@dc5 test]# ll -laR .: total 20 drwxr-xr-x 4 root root 4096 Dec 15 11:55 . drwxrwxrwt 7 root root 4096 Dec 15 11:59 .. drwxr-xr-x 2 root root 4096 Dec 15 12:14 new drwxr-xr-x 3 root root 4096 Dec 15 12:14 old ./new: total 8 drwxr-xr-x 2 root root 4096 Dec 15 12:14 . drwxr-xr-x 4 root root 4096 Dec 15 11:55 .. ./old: total 12 drwxr-xr-x 3 root root 4096 Dec 15 12:14 . drwxr-xr-x 4 root root 4096 Dec 15 11:55 .. -rw-r--r-- 1 root root 0 Dec 15 12:07 .test3 -rw-r--r-- 1 root root 0 Dec 15 12:05 test1 drwxr-xr-x 2 root root 4096 Dec 15 12:14 test2 ./old/test2: total 8 drwxr-xr-x 2 root root 4096 Dec 15 12:14 . drwxr-xr-x 3 root root 4096 Dec 15 12:14 ..
◎操作一:
[root@dc5 test]# cp -a old/* new/ [root@dc5 test]# ll -laR new/ new/: total 12 drwxr-xr-x 3 root root 4096 Dec 15 12:15 . drwxr-xr-x 4 root root 4096 Dec 15 11:55 .. -rw-r--r-- 1 root root 0 Dec 15 12:05 test1 drwxr-xr-x 2 root root 4096 Dec 15 12:14 test2 new/test2: total 8 drwxr-xr-x 2 root root 4096 Dec 15 12:14 . drwxr-xr-x 3 root root 4096 Dec 15 12:15 ..
問(wèn)題出來(lái)了:隱含的.test3文件沒(méi)有一齊拷貝到new目錄下。
原因是:參數(shù)使用不正確。這樣的寫法,通常都是因?yàn)槭煜ち诉^(guò)去Dos的格式(包括我自己),而實(shí)際在bash環(huán)境下,cp使用是不能匹配類似.開(kāi)頭的隱含文件的。
◎操作二
正確的寫法應(yīng)該這樣:
[root@dc5 test]# cp -a old/. new/ [root@dc5 test]# ll -laR new/ new/: total 12 drwxr-xr-x 3 root root 4096 Dec 15 12:14 . drwxr-xr-x 4 root root 4096 Dec 15 11:55 .. -rw-r--r-- 1 root root 0 Dec 15 12:07 .test3 -rw-r--r-- 1 root root 0 Dec 15 12:05 test1 drwxr-xr-x 2 root root 4096 Dec 15 12:14 test2 new/test2: total 8 drwxr-xr-x 2 root root 4096 Dec 15 12:14 . drwxr-xr-x 3 root root 4096 Dec 15 12:14 ..
不用*號(hào),而用.號(hào)代替。
還有一種比較復(fù)雜一些的寫法:
[root@dc5 test]# cp -a old/* old/.[^.]* new/ [root@dc5 test]# ll -laR new/ new/: total 12 drwxr-xr-x 3 root root 4096 Dec 15 12:25 . drwxr-xr-x 4 root root 4096 Dec 15 11:55 .. -rw-r--r-- 1 root root 0 Dec 15 12:07 .test3 -rw-r--r-- 1 root root 0 Dec 15 12:05 test1 drwxr-xr-x 2 root root 4096 Dec 15 12:14 test2 new/test2: total 8 drwxr-xr-x 2 root root 4096 Dec 15 12:14 . drwxr-xr-x 3 root root 4096 Dec 15 12:25 ..
請(qǐng)注意寫法,不要寫成.*了。(原因請(qǐng)看下面)
三、問(wèn)題2
上面提到不要寫成.,那.代表什么?
[root@dc5 test]# echo .* . ..
.*代表的是當(dāng)前目錄,以及上一層目錄。
所以,使用.*會(huì)導(dǎo)致更大的問(wèn)題:
[root@dc5 test]# cp -a old/.* new/ cp: cannot copy a directory, `old/..', into itself, `new/' cp: cannot copy a directory, `old/..', into itself, `new/' cp: will not create hard link `new/old' to directory `new/.' cp: overwrite `new/.test3'? y [root@dc5 test]# ll -laR new/ new/: total 16 drwxr-xr-x 4 root root 4096 Dec 15 11:55 . drwxr-xr-x 4 root root 4096 Dec 15 11:55 .. -rw-r--r-- 1 root root 0 Dec 15 12:07 .test3 drwxr-xr-x 2 root root 4096 Dec 15 12:14 new -rw-r--r-- 1 root root 0 Dec 15 12:05 test1 drwxr-xr-x 2 root root 4096 Dec 15 12:14 test2 new/new: total 8 drwxr-xr-x 2 root root 4096 Dec 15 12:14 . drwxr-xr-x 4 root root 4096 Dec 15 11:55 .. -rw-r--r-- 1 root root 0 Dec 15 12:07 .test3 -rw-r--r-- 1 root root 0 Dec 15 12:05 test1 new/test2: total 8 drwxr-xr-x 2 root root 4096 Dec 15 12:14 . drwxr-xr-x 4 root root 4096 Dec 15 11:55 ..
也就是說(shuō),使用.*就等于這樣了:
[root@dc5 test]# cp -a old/. old/.. old/.test3 new/ [root@dc5 test]# echo old/.* old/. old/.. old/.test3
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- linux采用scp命令拷貝文件到本地,拷貝本地文件到遠(yuǎn)程服務(wù)器的方法
- Linux使用scp命令進(jìn)行文件遠(yuǎn)程拷貝詳解
- 詳談Linux寫時(shí)拷貝技術(shù)(copy-on-write)必看篇
- Virtualbox主機(jī)和虛擬機(jī)之間文件夾共享及雙向拷貝(Windows<->Windows, Windows<->Linux)
- linux拷貝命令之高級(jí)拷貝scp命令詳解
- linux使用scp命令備份文件 scp拷貝文件
- 使用scp獲取遠(yuǎn)程linux服務(wù)器上的文件 linux遠(yuǎn)程拷貝文件
- linux下如何實(shí)現(xiàn)快速拷貝大文件
相關(guān)文章
Linux服務(wù)器進(jìn)程退出了,但是顯存占用問(wèn)題的解決
這篇文章主要介紹了Linux服務(wù)器進(jìn)程退出了,但是顯存占用問(wèn)題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09Linux中openssl/opensslv.h找不到問(wèn)題的解決方法
最近在安裝scrapy過(guò)程中碰到了openssl某個(gè)文件找不到的問(wèn)題,通過(guò)查找相關(guān)的資料進(jìn)行了解決,下面這篇文章主要給大家分享了關(guān)于Linux中openssl/opensslv.h找不到問(wèn)題的解決方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-07-07linux下實(shí)現(xiàn)web數(shù)據(jù)同步的四種方式(性能比較)
這篇文章主要介紹了linux下常用的四種web數(shù)據(jù)同步方法,并且說(shuō)明了每個(gè)方法的功能與優(yōu)勢(shì),需要的朋友可以參考下2013-09-09Linux系統(tǒng)如何修改遠(yuǎn)程連接22端口
這篇文章主要介紹了Linux系統(tǒng)如何修改遠(yuǎn)程連接22端口問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12Linux推薦使用Xfce桌面環(huán)境的8個(gè)原因
今天小編就為大家分享一篇關(guān)于Linux推薦使用Xfce桌面環(huán)境的8個(gè)原因,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-09-09Linux下activeMQ的啟動(dòng)和停止命令方式
文章介紹了在Linux環(huán)境下啟動(dòng)和停止Apache ActiveMQ的步驟,啟動(dòng)前需要確保服務(wù)未運(yùn)行,使用`./activemq start`命令啟動(dòng),停止時(shí)使用`./activemq stop`命令,啟動(dòng)后可以通過(guò)訪問(wèn)`http://127.0.0.1:8161/admin/`來(lái)驗(yàn)證服務(wù)是否成功啟動(dòng)2024-12-12Apache?SeaTunnel實(shí)現(xiàn)?非CDC數(shù)據(jù)抽取實(shí)踐記錄
這篇文章主要介紹了Apache?SeaTunnel實(shí)現(xiàn)?非CDC數(shù)據(jù)抽取實(shí)踐,主要介紹SeaTunnel?1.X在交管行業(yè)中的應(yīng)用,以及其中如何實(shí)現(xiàn)從Oracle數(shù)據(jù)庫(kù)把數(shù)據(jù)增量導(dǎo)入數(shù)倉(cāng)這樣一個(gè)具體的場(chǎng)景,需要的朋友可以參考下2022-05-05