everyday:linux cp
功能說明
cp 命令用于復(fù)制文件或目錄
- 若同時指定多個文件或目錄犯助,而最后的目的地并非一個已存在的目錄许布,則會出現(xiàn)錯誤信息
- 若同時指定多個文件或目錄,且最后的目的地是一個已經(jīng)存在的目錄霞幅,則它會把前面指定的所有文件或目錄復(fù)制到此目錄中
命令詳解
- 命令格式
- cp [選項]... [-T] 源文件 目標文件
- cp [選項]... 源文件... 目錄
- cp [選項]... -t 目錄 源文件...
- 命令功能
將源文件復(fù)制至目標文件,或?qū)⒍鄠€源文件復(fù)制至目標目錄。長選項必須使用的參數(shù)對于短選項時也是必需使用的先舷。 - 命令參數(shù)
-a, --archive 等于-dR --preserve=all
--attributes-only 僅復(fù)制屬性而不復(fù)制數(shù)據(jù) --backup[=CONTROL 為每個已存在的目標文件創(chuàng)建備份
-b 類似--backup 但不接受參數(shù)
--copy-contents 在遞歸處理是復(fù)制特殊文件內(nèi)容
-d 等于--no-dereference --preserve=links
-f, --force 如果目標文件無法打開則將其移除并重試(當 -n 選項存在時則不需再選此項)
-i, --interactive 覆蓋前詢問(使前面的 -n 選項失效)
-H 跟隨源文件中的命令行符號鏈接
-l, --link hard link files instead of copying
-L, --dereference always follow symbolic links in SOURCE
-n, --no-clobber 不要覆蓋已存在的文件(使前面的 -i 選項失效)
-P, --no-dereference 不跟隨源文件中的符號鏈接
-p 等于--preserve=模式,所有權(quán),時間戳
--preserve[=屬性列表 保持指定的屬性(默認:模式,所有權(quán),時間戳),如果可能保持附加屬性:環(huán)境滓侍、鏈接蒋川、xattr 等
--no-preserve=屬性列表 不保留指定的文件屬性
--parents 復(fù)制前在目標目錄創(chuàng)建來源文件路徑中的所有目錄
-R, -r, --recursive 遞歸復(fù)制目錄及其子目錄內(nèi)的所有內(nèi)容
--reflink[=WHEN] 控制克隆/CoW 副本。請查看下面的內(nèi)如撩笆。
--remove-destination 嘗試打開目標文件前先刪除已存在的目的地文件 (相對于 --force 選項)
--sparse=WHEN 控制創(chuàng)建稀疏文件的方式
--strip-trailing-slashes 刪除參數(shù)中所有源文件/目錄末端的斜杠
-s, --symbolic-link 只創(chuàng)建符號鏈接而不復(fù)制文件
-S, --suffix=后綴 自行指定備份文件的后綴
-t, --target-directory=目錄 將所有參數(shù)指定的源文件/目錄復(fù)制至目標目錄
-T, --no-target-directory 將目標目錄視作普通文件
-u, --update 只在源文件比目標文件新捺球,或目標文件不存在時才進行復(fù)制
-v, --verbose 顯示詳細的進行步驟
-x, --one-file-system 不跨越文件系統(tǒng)進行操作
--help 顯示此幫助信息并退出
--version 顯示版本信息并退出
默認情況下,源文件的稀疏性僅僅通過簡單的方法判斷夕冲,對應(yīng)的目標文件目標文件也被為稀疏氮兵。這是因為默認情況下使用了--sparse=auto 參數(shù)。如果明確使用 --sparse=always 參數(shù)則不論源文件是否包含足夠長的0 序列也將目標文件創(chuàng)文建為稀疏件歹鱼。使用--sparse=never 參數(shù)禁止創(chuàng)建稀疏文件泣栈。
當指定了--reflink[=always] 參數(shù)時執(zhí)行輕量化的復(fù)制,即只在數(shù)據(jù)塊被修改的情況下才復(fù)制。如果復(fù)制失敗或者同時指定了--reflink=auto,則返回標準復(fù)制模式。
The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.The version control method may be selected via the --backup option or through the VERSION_CONTROL environment variable. Here are the values:
none, off 不進行備份(即使使用了--backup 選項)
numbered, t 備份文件加上數(shù)字進行排序
existing, nil 若有數(shù)字的備份文件已經(jīng)存在則使用數(shù)字健芭,否則使用普通方式備份
simple, never 永遠使用普通方式備份
有一個特別情況:如果同時指定--force 和--backup 選項耘斩,而源文件和目標文件是同一個已存在的一般文件的話,cp 會將源文件備份烛缔。
- 舉例
- eg1 拷貝f1.txt為cpf1.txt
cp f1.txt cpf1.txt
+ eg2 采用交互方式將文件f1.txt拷貝為cpf12.txt
#1. 如果cpf12.txt不存在,則直接復(fù)制成功
cp -i f1.txt cpf12.txt
#2. 如果cpf12.txt已存在,則會出現(xiàn)提示是否覆蓋原來的矮燎,y就會覆蓋
cp -i f1.txt cpf12.txt
overwrite cpf12.txt? (y/n [n]) y
#3. 如果cpf12.txt已存在,則會出現(xiàn)提示是否覆蓋原來的赔癌,n就不會覆蓋
cp -i f1.txt cpf12.txt
overwrite cpf12.txt? (y/n [n]) n
not overwritten
+ eg3 強制覆蓋
# 如果cpf12.txt已經(jīng)存在诞外,也可以使用強制覆蓋
cp -f f1.txt cpf12.txt
+ eg4 拷貝目錄
# 將目錄dir1復(fù)制成dir11
cp -R dir1 dir11
ls -la dir11
+ eg5 同時拷貝文件和目錄
# 新建一個目錄dir3
mkdir dir3
# 將某些文件和目錄復(fù)制到dir3目錄下
cp -R dir11/f1.txt dir12/f2.txt dir1 dir2 dir3
ls -la dir3
+ eg6 拷貝的文件保留屬性
# -p或--preserve保留源文件或目錄的屬性,包括所有者灾票、所屬組峡谊、權(quán)限與時間
cp -p dir2/f2.txt f2.txt
# -P或--parents保留源文件或目錄的路徑,此路徑可以是絕對路徑或相對路徑刊苍,且目的目錄必須已經(jīng)存在
cp -P dir2/f2.txt f3.txt
# -b備份既们,MAC上不支持該命令,linux系統(tǒng)上可以用
+ eg7 目錄合并及文件覆蓋
# 全并兩個目錄
# -f 強制覆蓋 -r 拷貝目錄和文件 -v 顯示過程 -p 保留原有屬性
cp -frvp dir1/* dir2
Questons and Solve method
-
cp: omitting directory "xxx"
在linux系統(tǒng)中,復(fù)制文件夾正什,提示:
cp: omitting directory './usr'
其中啥纸,usr
是要復(fù)制的文件夾名,出現(xiàn)該警告的原因是因為usr目錄下還存在目錄婴氮,所以不能直接拷貝斯棒。解決辦法:使用遞歸拷貝,在cp命令后面加上-r參數(shù)主经,形如:
[root@localhost opt]# cp -r ./usr /
這是的-r
代表遞歸的意思荣暮。同樣,在linux系統(tǒng)下刪除目錄時也需要加上-r參數(shù) 罩驻,如果目錄為空穗酥,則會直接刪除,如果目錄非空惠遏,則會級聯(lián)刪除砾跃。不過在級聯(lián)刪除時也會有一個問題就是如果目錄下存在很多的文件或者子目錄,系統(tǒng)會一個一個進行提示节吮。如果想一步刪除不用提示的話可以使用
rm -rf
命令抽高。f是force的意思,代表強制刪除课锌,無提示厨内!