Files
ls 顯示一個目錄,但無法訪問
我試圖將一個文件夾從一個位置複製到另一個位置。該文件夾大約為 6.4 Gb。
所以我做了
cp -r source_folder level1/val
之後,我進入 level1 文件夾並檢查:
level1$ ls val
但如果我嘗試 cd 進入 val,則會引發錯誤:
level1$ cd val -bash: cd: val: No such file or directory
而且它似乎也沒有複製任何東西:
level1$ du -sh val 0 val
我還用python檢查了目錄是否存在,但它也說它不存在
>>> import os >>> os.path.exists('level1/val') False
我什至無法刪除已創建的文件夾:
level1$ rmdir val rmdir: failed to remove 'val': Not a directory
另一方面,我可以像刪除文件一樣刪除它:
level1$ rm val level1$ ls level1$
到底是怎麼回事?以及如何確保正確複製文件夾?
編輯 添加了
ls -ld source_folder level1/val
返回的輸出lrwxrwxrwx 1 user1 dinfk 4 Jun 20 12:05 source_folder -> test drwxr-sr-x 2 user2 systems 4096 Aug 27 19:02 level1/val
顯然,
val
第一次複製的結果是一個斷開的符號連結。
ls
列出val
,因為它存在:有一個名為val
.cd val
抱怨“沒有這樣的文件或目錄”,因為val
是一個損壞的符號連結。cd
需要訪問連結的目標,但目標不存在(這是損壞的符號連結的定義)。du val
顯示 0 因為符號連結不使用任何儲存空間。(名稱和元數據的空間不計算在內。)os.path.exists
返回False
損壞的符號連結。rmdir val
理所當然地抱怨這val
不是一個目錄,因為它是一個符號連結。rm val
正常刪除val
,因為val
是一個不是目錄的文件。您報告:
lrwxrwxrwx 1 user1 dinfk 4 Jun 20 12:05 source_folder -> test
該命令
cp -r
將符號連結複製為符號連結。因為source_folder
是一個目標是 的符號連結test
,所以這導致level1/val
是一個目標是 的符號連結test
。符號連結的目標是一個簡單的字元串,它不會“跟踪”任何東西。不以 a 開頭的符號連結/
是相對的。level1/val
是一個符號連結,其目標是test
它指向level1/test
. 由於level1/test
不存在,因此符號連結已損壞。後來你看到:
drwxr-sr-x 2 user2 systems 4096 Aug 27 19:02 level1/val
這次你做了一些不同的事情並複制了一個目錄樹。
要複製連結的目標而不是連結本身,您可以使用
cp -r source_folder/ level1/val
尾部斜杠告訴
cp
命令對連結指向的目錄而不是符號連結本身進行操作。如果參數是一個目錄,這沒有任何區別。
source_folder
- 是引用test
目錄的符號連結但是符號連結中的目錄路徑是相對的。如果您
/home/user/test
在符號連結中使用絕對路徑(例如 ),複製將正常進行。如果要從符號連結指向的目錄中複製所有文件,可以使用
-d
option withcp
command。