復制當前目錄.
當前目錄下既有文件夾也有文件:
- 當
~/cptest
這個文件夾已創建時,使用命令cp -r . ~/cptest/
或cp -r . ~/cptest
會將當前目錄下的所有文件夾和文件復制到~/cptest
目錄下。 - 當
~/cptest
這個文件夾還未被創建時,使用命令cp -r . ~/cptest/
或cp -r . ~/cptest
會創建此目錄,並將當前目錄下的所有文件夾和文件復制到~/cptest
目錄下。
總結一下:
- 當source是個
.
時,會認為dest必須是個文件夾。如果dest是個non-directory,那么就會報錯cp: cannot overwrite non-directory ‘AAA’ with directory ‘BBB’
。 - 不管dest目標文件夾是否創建,效果都是一樣的(因為如果沒有創建,就會創建后,再復制)。
- 如果當前目錄下有一個文件夾叫
1.0
(即ls能看到藍色的1.0),想要復制1.0
的當前目錄,則使用cp -r 1.0/. ~/cptest
。 - dest文件夾后面有沒有
/
都是一樣的,下面的命令分析也能看出。
復制所有*
當前目錄下既有文件夾也有文件:
- 當
~/cptest
這個文件夾已創建時,使用cp -r * ~/cptest/
,會把所有非隱藏文件和非隱藏文件夾復制過去(隱藏即是即.
開頭的)。這就是它和cp -r . ~/cptest/
的區別。 - 當
~/cptest
這個文件夾還未被創建時,使用cp -r * ~/cptest/
,會報錯cp: target '/home/liu/cptest' is not a directory
。
總結一下:
- 當source是個
*
時,會認為dest是個文件夾。 - 復制
*
相比.
限制更多:當dest文件夾已創建,則只能復制非隱藏的東西過去;當dest文件夾未創建時,則命令不成功。
復制某個文件夾
當前目錄下有一個文件夾叫1.0
(即ls能看到藍色的1.0),想要復制1.0
到某個地方:
- 當
~/1.0
這個文件夾已創建時,使用命令cp -r 1.0 ~/1.0/
或cp -r 1.0 ~/1.0
,會將當前目錄下的1.0
文件夾復制到~/1.0
文件夾下。即目錄結構是~/1.0/1.0/something
。 - 當
~/1.0
這個文件夾還未被創建時,使用命令cp -r 1.0 ~/1.0/
或cp -r 1.0 ~/1.0
,會將當前目錄下的1.0
文件夾復制到~
文件夾下(或者理解為,先新建~/1.0
文件夾,再把1.0
里所有東西復制到~/1.0
)。即目錄結構是~/1.0/something
(相當於先mkdir ~/1.0
,再cp -r 1.0/. ~/1.0
;注意是可以把1.0下的隱藏文件和隱藏文件夾都復制過去的)。這種情況下,使用cp -r 1.0 ~/2.0/
也是一樣,目錄結構是~/2.0/something
,相當於先改名,再復制。
總結一下:
- 當source是個文件夾時,會認為dest也必須是個文件夾。如果dest是個non-directory,那么就會報錯
cp: cannot overwrite non-directory 'AAA' with directory 'BBB'
。 - 當dest文件夾已經存在,那么會把source文件夾放到dest文件夾下。
- 當dest文件夾不存在,那么新建dest文件夾,再把source文件夾下所有東西復制到dest文件夾下。
`