本篇介紹文件拷貝操作,主要講兩個命令:
命令 | 對應英文 | 作用 |
---|---|---|
tree[目錄名] | tree | 以樹狀圖列出文件目錄結構 |
cp 源文件 目標文件 | copy | 復制文件或者目錄 |
tree
tree命令可以將一個目錄結構以樹狀圖的形式展示出來,便於我們了解目錄層級關系。在進行文件操作前,這個命令有時很有用。
在這之前,需要注意的是,你的Linux環境可能沒有這個命令,比如我的centos服務器環境就沒有,這時你可以自己安裝這個命令,輸入以下命令:
yum install tree
直接輸入tree命令可以查看當前所在目錄的層級關系:
//在a目錄下輸入 tree //結果 . └── b └── c └── 123.txt
也可以指定目錄名,比如回到a目錄上層,再輸入命令:
tree a //結果 a └── b └── c └── 123.txt
注意兩次展示結果的區別,一個是從 . 開始,表當前目錄,一個是從 a 開始,表a目錄下。
有時候一個文件夾里內容太多,如果把全部層級展示出來,結構可能太長了,這時我們只展示目錄就好,需要用到選項-d
,使用它就可以只展示目錄。
還是拿上面的a目錄演示,我在b目錄里再建一個文件:
touch a/b/test.txt //這種寫法是可以的
再看一下a目錄結構:
tree a //結果 a └── b ├── c │ └── 123.txt └── test.txt
現在使用 -d 選項:
tree -d a //結果 a └── b └── c └── 123.txt
此時發現,b目錄里的文件沒顯示了,但是c目錄里還顯示了。關於這個,也可能是我的環境原因,有些命令包括之前已經提到的命令,在不同的Linux環境下可能表現有些許差異(我自己覺得),但功能都一樣,自己多試試吧。
cp
拷貝命令也是很簡單,它的結構是:
cp 源文件路徑 目標文件路徑
比如我的根目錄下,有一個readme.txt文件,我想將它復制到home目錄下,並重命名為test.txt。如果當前目錄就是根目錄,那么輸入:
cp readme.txt ~/test.txt //~表示home目錄
此時在home目錄下,就有了test.txt文件。這時,如果你不想重命名,你可能這么寫:
cp readme.txt ~/readme.txt
但其實,我們可以更簡單點:
cp readme.txt ~
這樣也是可以的。所以記住了,如果不想重命名復制的文件,直接寫目標文件的路徑就好。
cp命令的幾個選項
cp命令的選項也有好幾個,這里主要說三個:
命令 | 含義 |
---|---|
-f | 對於已經存在的目標文件直接覆蓋,不會提示 |
-i | 覆蓋文件前提示 |
-r | 拷貝一個目錄,目錄下的所有文件及目錄都拷貝 |
看含義就知道什么意思了,先看 -f 選項,如果我們不加這個選項,然后復制一個文件名已經存在的文件:
// home目錄下已經有readme.txt這個文件了,然后再復制一份根目錄的readme.txt cp /readme.txt .
結果:
cp: overwrite ‘./readme.txt’?
顯然我們需要根據提示選擇是否需要覆蓋。那如果我們不需要提示的話,就可以使用 -f 這個選項了:
cp -f /readme.txt .
結果:
cp: overwrite ‘./readme.txt’?
what? 不是不會提示了嗎,怎么還有提示?這個選項沒效果?剛開始我也懷疑是我的環境原因,后來上網查詢才了解到,默認cp命令是有別名(alias cp='cp -i')
的,無法強制覆蓋,即使你用 -f 參數也無法強制覆蓋文件。此時如果想看到效果,可以臨時取消cp的alias:
unalias cp
再輸入上述復制命令就不會有提示了。不過顯然在平時使用過程中,我們不建議使用-f選項,連cp默認都是使用了 -i 選項,這樣做的好處是防止誤操作啊,所有我們應該盡量加上 -i 選項,防止沒必要的損失。
如果我們想拷貝一個目錄,那么必須加上 -r 這個選項,我在根目錄下新建了一個test目錄:
tree test //結果 test └── a ├── 123.txt └── b
現在就在當前目錄拷貝一份,並重命名為test1:
cp test ./test1 //結果 cp: omitting directory ‘test’
我們再加上 -f 選項:
cp -r test ./test1
這時沒有提示了,沒有提示就是最好的提示,可以看到當前目錄下多了一個test1目錄。