2016-12-26 77 views
1

我需要能夠刪除與任何用戶系統的Documents文件夾相關的目錄。無法在rmdir中使用具有波浪號的文件夾路徑

rmdir: ~/Documents/Folder: No such file or directory 

如果我手動輸入擴展路徑(/ Users/ricky/Documents/Folder),它工作正常。

我以爲bash會在路徑的開頭自動擴展波浪號嗎?

更新:

嘗試一堆不同的方法,建議後,我很有信心,現在的問題是我如何存儲路徑。我從我的行讀行的文本文件獲取路徑:

... 
export_folder_path="$(echo $line | cut -f2 -d=)" 
... 

echo $export_folder_path 
rmdir $export_folder_path 
rmdir "$HOME/Documents/Folder\ 1" 

此輸出以下:

$HOME/Documents/Folder\ 1 
rmdir: $HOME/Documents/Folder\ 1: No such file or directory 
rmdir: /Users/ricky/Documents/Folder\ 1: Directory not empty (This is actually what I want) 

我不知道是什麼之間我手動鍵入的區別導出路徑並使用變量。爲什麼變數拒絕擴大$HOME?我嘗試了許多不加運算的引用語的變體。

+0

'realpath -m〜/ Documents/Folder'輸出是什麼? – sschuberth

+0

@sschuberth我似乎沒有一個名爲realpath的程序? – Ricky

+0

你在跑什麼?從路徑看,你在Windows下運行Bash。如果是這樣,什麼Bash? Cygwin的? MSYS(2)? Git for Windows? Windows 10下的Linux子系統? – sschuberth

回答

1

Tilde擴展不適用於所有情況。可以代替使用HOME變量:

rmdir $HOME/Documents/Folder 

bash manual

波浪線擴展如果一個字有一個沒有引號的波形符 (「〜」)開始,所有的字符的前述第一加引號斜線(或 所有字符,如果沒有未加引號的斜線)被認爲是波浪前綴 。如果沒有引用波德文前綴中的字符 ,則代字號後面的波代數前綴中的字符爲 將視爲可能的登錄名。如果此登錄名爲空 字符串,則代字號替換爲shell參數 HOME的值。如果未設置HOME,則執行 shell的用戶的主目錄將被替換。否則,代字符前綴 將替換爲與指定的登錄名稱 關聯的主目錄。

如果代字符前綴是'〜+',那麼shell變量PWD 的值將替換代字符前綴。如果代字符前綴是'〜 - ',則替換shell變量OLDPWD的值 (如果設置)。如果代字符前綴中的代字號後面的 字符由數字N組成,可以選擇以'+'或' - '作爲前綴,則代字號前綴 將替換爲目錄st中的相應元素,因爲它 將以由tilde-前綴 作爲參數調用的dirs內建值顯示。如果代字號前 代字號後面的字符由不帶前導'+'或' - '的數字組成,則假定「+」爲 。

如果登錄名稱無效,或者代字號擴展失敗,則字 保持不變。

+0

感謝@usr,我已更新我的問題以添加關於爲什麼它仍然無法工作的一些進一步的細節。 – Ricky