1. 程式人生 > >shell命令之cp

shell命令之cp

作業系統為 macOS 10.12.4

cp 為複製命令,實際中分為檔案間的複製,目錄間的複製,檔案到目錄的複製以及連結的複製。

檔案間的複製

cp file1 file2
  • 如果 file2 不存在,就先建立 file2 ,然後把 file1 內容複製到 file2 中
  • 如果 file2 存在,把把 file1 的內容覆蓋 file2 的內容

覆蓋 file2 的內容,有時候並不是所希望的

  • 引數 -i 可以提示是否覆蓋 file2
  • 引數 -n 讓複製命令不覆蓋 file2 的內容

檔案到目錄的複製

cp source_file ... target_directory

把多個 source_file 複製到 target_directory 目錄中

省略號表示多個 source_file

目錄間的複製

目錄間的複製需要帶上 -R 引數

cp -R source_directory target_directory

這也有幾種情況

  • 如果 target_directory 不存在,會先建立 target_directory,然後把 source_directory 中的內容複製到 target_directory 目錄下
  • 如果 target_directory 存在,又有2種情況
    1. 如果 source_directory 不以正斜線(/) 結尾,就會 source_directory 和 它的內容一起復制到 target_directory 下,相當於把 source_directory 剪下,然後貼上到 target_directory 目錄下
    2. 如果 source_directory 以正斜線(/)結果,就只把 source_directory 下的內容複製到 target_directory 目錄下,然而並不包括 source_directory 目錄本身。

而在 Unbuntu 12.04 版本測試下,會略微有點不同,當 target_directory 存在的時候,無論 source_directory 是否以正斜線(/)結尾,都是把 source_directory 的目錄 和 內容都複製到 target_directory 中。

這裡寫圖片描述

那麼,當 target_directory 已經存在的情況下,用 cp -r source_directory/* target_directory/

只把 source_directory 的內容複製到 target_directory 中.

這裡寫圖片描述

連結

有時候,會想在系統上維護一個檔案的兩個或者多個副本,可以建立連結,連結是目錄上指向真實檔案的佔位符。

連結有兩種型別

  1. 符號連結,即軟連結
  2. 硬連結

建立硬連結

硬連結會建立一個獨立的檔案,這個檔案與原始檔的所有資訊都相同,修改硬連結等同於修改原始檔

在 Linux 下,可以用 cp -l 或者 ln命令建立硬連結,但是在 macOS 下,只能用 ln 命令建立硬連結

這裡寫圖片描述

可以看到,檔案 david 和 hard_link_david 從 inode , 到檔案許可權,到檔案大小,到最近修改時間都相同。

當然,如果 hard_link_david 已經存在,系統會提示檔案已經存在,所以你並不必擔心覆蓋的問題。我覺得應該始終保持謹慎的心態,用 ln -i 讓系統提示是否替代,然後做出選擇。

這裡寫圖片描述

建立符號連結

同樣 ,在 Linux 下,可以用 cp -s 建立符號連結,然而在 macOS 下,只能用 ln -s 建立符號連結。

這裡寫圖片描述

可以看到,符號連結檔案 和 原始檔 的 inode 資訊不一樣,這說明符號連結是一個獨立的檔案。同時也可以看到檔案大小不一樣,這說明符號連結檔案並不儲存原始檔中的資料,只需要儲存原始檔的有關資訊(原始檔位置)。

上面例子中,是在當前目錄下建立的符號連結,但是如果不是在當前目錄下建立符號連結

ln -s source_file target_directory/symbolic_link_file

如果我們用 ls -li target_directory/symbolic_link_file 檢視,確實是指向名為 source_file 的符號連結,但是其實這個名為 source_file 檔案指的的 target_directory 目錄下的 source_file 檔案,然而 target_directory 目錄下的 source_file 在此次的符號連結的建立過程過沒有創建出來,但是隻要你編輯過smbolic_link_file,這個目錄下的 source_file 才會建立。

目前我還不知道這個行為在實際中怎麼使用

同樣的,如果你用 mv 命令把當前目錄下的符號連結移動到另外一個目錄,也會發生同樣的情況。

符號連結的複製

單獨複製一個符號連結檔案,其實是建立一個內容與原始檔相同,然而卻一個獨立的新檔案。

這裡寫圖片描述

copy_symbolic_link_david 雖然是 symbolic_link_david 複製過來的,但是從檔案型別看是一個檔案,而不是一個連結,從檔案大小看,它與檔案david 的大小是一樣的,所以 copy_symbolic_link_david 只是一個與原始檔 david 內容相同的獨立檔案而已。

如果把帶有符號連結的目錄進行復制

這裡寫圖片描述

可以看到 dir2 目錄是完全複製了 dir1 目錄,只是兩個符號連結指的都只是各自目錄下的 david 檔案,這個從 inode 資訊就可以看出兩個目錄下的 david 檔案是不一樣的(只是內容相同而已)。這個系統預設行為與 cp -RP 行為是一樣的。

硬連結複製

單獨複製一個硬連結,效果和符號連結一樣,會建立一個新的檔案( 內容相同 )。

但是如果複製的硬連結所在目錄呢?

這裡寫圖片描述

從 inode 資訊可以看到,dir2 目錄下的複製出來的檔案硬連結不僅是一個單獨的檔案,而且與 dir2 目錄下的檔案 zhou 沒有任何關係。

cp -RL

這裡寫圖片描述

-L 配合 -R 使用,可以看到,符號連結和硬連結都複製成了單獨的檔案。

相關推薦

shell命令cp

作業系統為 macOS 10.12.4 cp 為複製命令,實際中分為檔案間的複製,目錄間的複製,檔案到目錄的複製以及連結的複製。 檔案間的複製 cp file1 file2 如果 file2 不存在,就先建立 file2 ,然後把 fi

Linux命令CP詳解

linux命令之cp詳解Linux命令之CP詳解嘿嘿,又一周過去了,大家過的怎麽樣呢,在這一周時間裏,小編可是又學到不少新知識呢。今天呢,小編就和大家分享一下Linux中我們常用的CP的命令,這裏的cp可是copy的簡寫噢。(容我嘚瑟一下) 學過linux的都知道,在我們操作的過程中,我們常常會用到cp這個命

python調用shell命令三慷慨法

ech ces nds 不用 準備 每一個 popen函數 通信 hello preface: 忙於近期的任務,須要用到libsvm的一些命令。如在終端執行javasvm_train train_file model_file. pythonsubset.py file t

shell命令巧用cut

文件名 取出 排序 統計 bsp int shell 一個 -c 需求:取出日誌中ip字段,並進行統計排序 .一般用用awk命令 假如ip地址為第一個字段 那麽 awk ‘{print $1}’ 文件名 |sort |uniq -c|sort-nr 那如果不是第一個字段而且

shell命令read

shell readread:簡介:read命令從鍵盤讀取變量的值,通常用在shell腳本中與用戶進行交互的場合。該命令可以一次讀取多個變量的值,變量和輸入的值都需要使用空格隔開。在read命令後面,如果沒有指定變量名,讀取的數據將被自動賦值給特定的變量REPLY。語法read(選項)(參數選項Read可以帶

Hive Shell 命令二(表中資料的操作,出自Hive程式設計指南)

一、 互動模式: show tables; #檢視所有表名 show tables  'ad*'  #檢視以'ad'開頭的表名 set 命令 #設定變數與檢視變數; set -v #檢視所有的變數 set hive.stats.atomic #檢視hive.sta

Linux基本命令cp

ext linux 備份文件 ESS mage 技術分享 eba 基本 data cp:拷貝文件或目錄,默認不能拷貝目錄參數: 例: 將test.txt文件復制到/tmp目錄下2.將/data目錄拷貝到/tmp目錄下:-r或-a3.備份文件 Linux基本命令之cp

shell命令tr

先看看tr的幫助文件: tr命令就是對標準輸入進行翻譯、壓縮、刪除等操作 舉個栗子: #!/usr/bin/env bash #replace echo "Hello Tr" |tr "HT" "ht" # replace H to h,T to t. #output hel

shell命令檔案壓縮與解壓(常用)

.tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是壓縮!) .gz 解壓1:gunzip FileName.gz 解壓2:gzip -d Fil

linux-shell命令mkdir(make dir)【建立目錄】

功能說明: 建立目錄。 語法介紹: mkdir [-p][--help][--version][-m <目錄屬性>][目錄名稱]。 補充說明: mkdir 可建立目錄並同時設定目錄的許可權。 引數說明: -m<目錄屬性> 或 --m

Shell 命令 jobs

Linux下使用Shell命令控制任務(Jobs)執行 下列命令可以用來操縱程序任務: ps 列出系統中正在執行的程序 kill 傳送訊號給一個或多個程序(經常用來殺死一個程序) jobs 列出屬於當前使用者的程序 bg 將程序搬到後臺執行(Background) fg

shell命令scp

scp即secure copy,主要用於遠端檔案拷貝。用法如下: scp [-option] [[[email protected]]host1:]file1 ... [[[email&

linux-shell命令chgrp(change group)【更改群組】

功能說明:變更檔案或目錄的所屬群組。 語法介紹:chgrp [-cfhRv][--help][--version][所屬群組][檔案或目錄...] 或 chgrp [-cfhRv][--help] [--reference =<參考檔案或目錄>][--ver

linux命令----cp命令用於複製檔案或目錄

1、cp命令作用 cp用於複製檔案或目錄 2、cp命令語法 cp [options] sourcedir destdir 引數說明:-a:此選項通常在複製目錄時使用,它保留連結、檔案屬性,並複製目

linux-shell命令rm(remove)【刪除檔案或目錄】

功能說明:刪除檔案或目錄。 語法介紹:rm [-dfirv][--help][--version][檔案或目錄...] 補充說明:執行rm指令可刪除檔案或目錄,如欲刪除目錄必須加上引數"-r",否則僅會刪除檔案。  引數說明: -d或--directory

shell命令---檢測磁盤空間

mtab ext2 -- del ble proc 媒體 ont directory 目錄   1、掛載存儲媒體   2、使用df命令   3、使用du命令 1、掛載存儲媒體 mount命令   Linux上用來掛載媒體的命令叫作mount

Shell命令文本操作

官方文檔 args 管道 shel find 忽略大小寫 忽略 rgs 處理 前言 在Linux中,文本處理操作是最常見的,應用非常廣泛,如果能熟練掌握,可以大大提高開發效率。 awk/sed/grep是文本操作領域的“三劍客”,學會了這3個命令

Linux常用命令cp、mv、rm、cat、more、head、tail、ln命令講解

上一章節中,我們瞭解到了Linux系統的最基礎的幾個檔案處理命令,核心的是`ls`命令,在今天這章中,我們來繼續學習Linux對於檔案操作相關的一些命令,比如複製、移動、刪除、檢視等命令。 1、`cp` 命令解釋 - 命令名稱:`cp` - 命令英文全稱:`copy` - 命令所在路徑: `/bin/cp

Shell命令-文件及目錄操作cp、find

exp style 評論 移動 oldboyedu type left tin fig 文件及目錄操作 - cp、find 1、cp:復制文件或目錄 cp命令的功能說明 cp命令用於復制文件或目錄。 cp命令的語法格式 cp [OPTION]... SOURCE.

【轉】linuxcp/scp命令+scp命令詳解

特殊 是否 用戶登錄 usr 指定 highlight 顯示 檔案 三種 linux之cp/scp命令+scp命令詳解 名稱:cp 使用權限:所有使用者 使用方式: cp [options] source dest cp [options] source