cp 在 .(dot) 或 .. (dot dot) 是源目錄
這個答案表明,可以將所有文件(包括隱藏文件)從目錄複製
src
到目錄中dest
,如下所示:mkdir dest cp -r src/. dest
答案或其評論中沒有解釋為什麼這實際上有效,而且似乎也沒有人找到這方面的文件。
我嘗試了一些東西。一、正常情況:
$ mkdir src src/src_dir dest && touch src/src_file src/.dotfile dest/dest_file $ cp -r src dest $ ls -A dest dest_file src
然後,
/.
最後:$ mkdir src src/src_dir dest && touch src/src_file src/.dotfile dest/dest_file $ cp -r src/. dest $ ls -A dest dest_file .dotfile src_dir src_file
因此,它的行為類似於
*
,但也會複製隱藏文件。$ mkdir src src/src_dir dest && touch src/src_file src/.dotfile dest/dest_file $ cp -r src/* dest $ ls -A dest dest_file src_dir src_file
.
並且是此處解釋..
的正確硬連結,就像目錄條目本身一樣。這種行為是從哪裡來的,它記錄在哪裡?
該行為是記錄在案的算法的邏輯結果
cp -R
。參見POSIX,步驟 2f:將source_file目錄中的文件複製到dest_file目錄,執行此處列出的四個步驟(1 到 4),文件為source_files。
.
和..
是目錄,分別是目前目錄和父目錄。就外殼而言,兩者都不是特殊的,因此擴展也不關心,並且目錄將被複製,包括隱藏文件。*
,另一方面,將擴展為文件列表,這是隱藏文件被過濾掉的地方。
src/.
是裡面的目前目錄src
,也就是src
它本身;src/src_dir/..
是src_dir
的父目錄,又是src
. 所以從外面看src
,如果src
是一個目錄,指定src/.
或src/src_dir/..
作為源文件cp
是等價的,並且複制其中的內容src
,包括隱藏文件。指定的要點
src/.
是,如果src
不是目錄(或目錄的符號連結),它將失敗,而src
不會。它也只會複製的內容src
,而不複製src
自己;這也符合文件:如果target存在並命名現有目錄,則文件層次結構中每個文件的相應目標路徑的名稱應為 target 的串聯,如果target 沒有以斜杠結尾,則為單個斜杠字元,以及文件相對路徑名到包含source_file的目錄。
所以
cp -R src/. dest
複製src
to的內容dest/.
(源文件.
在src
),而cp -R src dest
複製src
to的內容dest/src
(源文件在src
)。另一種思考方式是比較複製
src/src_dir
andsrc/.
,而不是比較src/.
andsrc
。.
行為就像src_dir
前一種情況一樣。