爲什麼rm -fR folderpath/*
也沒有刪除folderpath。據我瞭解通配符a*
意味着a
或a
加上任意數量的字符。所以,folderpath/*
意味着folderpath/
和folderpath/
加上任何字符。所以,該命令也應該執行rm -fR folderpath/
,這也應該導致刪除文件夾路徑。使用類似folderpath/*的通配符與folderpath /不匹配。爲什麼?
回答
因爲你只是刪除文件夾路徑裏面的「/」意味着。
使用
rm -rf folderpath
,如果你想這一切了。
我知道這一點。只是想知道爲什麼?因爲rm -fR文件夾路徑/刪除了整個文件夾。爲什麼rm的通配符表現不同? – christoph
這是因爲shell嘗試擴展通配符。試用ls
。
假設你有一個文件夾aaa
有兩個子文件夾bbb1
和和他們每個人的包含文件和ccc2
。應該是這樣的:
└── aaa
├── bbb1
│ ├── ccc1
│ └── ccc2
└── bbb2
├── ccc1
└── ccc2
讓我們來創建它們來進行測試:
mkdir -p aaa/bbb{1,2}
touch aaa/bbb{1,2}/ccc{1,2}
現在嘗試一下下面的命令告訴你:
ls aaa # first
ls aaa/ # second
ls aaa/* # third
第一個命令顯示出的aaa
內容,這是文件夾bbb1
和。第二個命令也是這樣。
但第三個命令將擴展爲
ls aaa/bbb1 aaa/bbb2
是的,它表明你喜歡預期bbb1
和的內容,這兩者都是時間的文件和ccc2
。
我想表明:你的shell代替了*
與給定的目錄(因爲所有文件和文件夾名稱匹配)的的所有文件(或文件夾)和aaa/bbb1 aaa/bbb2
替換您的字符串aaa/*
。但它確實不是擴大到aaa
,因爲這將採取/*
了。
在這一點上文檔還不清楚,但路徑名擴展與普通模式匹配有很小的差別。一旦匹配/
,您必須匹配目錄中的至少一個條目,才能認爲整個模式匹配。因此,儘管/foo/*
模式與字符串/foo/
匹配,但它不匹配路徑/foo/
。
一種可能的解釋是/foo/*
匹配文件/foo/
,如果沒有文件,則匹配失敗。謹以此更好地詮釋,不過,如果
shopt -s dotglob
ls /foo/*
匹配/foo/.
和/foo/..
。
也許想着它的正確的方法是,路徑擴展考慮的圖案/
-delimited序列,每個都必須的圖案作爲一個整體來匹配的東西匹配。
- 1. 當調用「FolderPath」(文件夾的路徑)時出現類型不匹配錯誤
- 2. 如何啓用類似Wordpress或Zend的Folderpath的PHP腳本?
- 3. 使用未分配的局部變量 'FOLDERPATH'
- 4. 將手動FolderPath設置爲MAPIFolder? C#
- 5. 爲什麼DirectoryInfo.GetFiles()匹配與掩碼不匹配的文件?
- 6. C#中使用瀏覽文本框爲FOLDERPATH
- 7. 通配符類型不匹配與原始類型
- 8. 類型與有界通配符不匹配?超類型
- 9. 爲什麼字符串不匹配?
- 10. 爲什麼這種類型不匹配?
- 11. 爲什麼Spark LogisticRegressionModel類型不匹配?
- 12. 類型不匹配錯誤,爲什麼?
- 13. Oracle通配符不匹配?
- 14. 這爲什麼不匹配?
- 15. 在Lucene的4,1分析儀打破通配符爲什麼使用MappingCharFilter匹配
- 16. 爲什麼Python正則表達式通配符只匹配newLine
- 17. 爲什麼「A」 ..「Z」在ANTLR匹配通配符如$或£
- 18. 與通配符匹配的網址
- 19. 爲什麼操作符和操作數的類型不匹配?
- 20. 爲什麼Regex.Match與Regex.Matches不匹配相同的字符串?
- 21. Java通用/通配符類型不匹配
- 22. 使用遞歸匹配字符串與通配符
- 23. 使用通配符匹配文件
- 24. 爲什麼FileExists不支持通配符?
- 25. 尺寸不匹配MatLab;不知道爲什麼它不匹配
- 26. 爲什麼Ruby使用=〜而不是〜=來匹配運算符?
- 27. 使用Application.Intersect爲什麼我會得到類型不匹配
- 28. 匹配字符串上的匹配類型不匹配
- 29. 爲什麼空字符串與Seq.empty不匹配?
- 30. 什麼的意思是 「匹配通配符是嚴格的」
在這種情況下,通配符是「shell globbing」,其中'*'與任何內容匹配,但不是** nothing ** _ - 它與正則表達式中的「*」不匹配,即匹配「零個或多個」... shell glob'*'與_zero_不匹配。 –
路徑名擴展與模式匹配的工作方式稍有不同。 – chepner
@StephenP這不完全正確。 'foo * bar'會匹配'foobar'。 – chepner