`ls -d */` 和 `ls -d *` 之間的差異?

`ls -d */` 和 `ls -d *` 之間的差異?

我正在努力理解 ls -d 的工作原理。我已經閱讀了其他 ls -d 問題,但沒有一個問為什麼ls -d *與 ls -d 的工作方式不同ls -d */。為什麼末尾的分隔符號如此重要?

ls *ls */以同樣的方式行事,所以我期望ls -d *ls -d */以同樣的方式工作。

相反, ls -d *就像執行 一樣列出當前目錄中的所有文件ls,而ls -d */列出當前目錄中的目錄。為什麼會這樣呢?

答案1

ls *ls */以同樣的方式行事。

不,他們沒有。如果工作目錄中有文件,它們將與第一個命令一起列出,但不會與第二個命令一起列出。

ls將列出在命令列上傳遞的檔案和目錄(包括其內容)。如果您使用 shell 通配符,您的 shell 將會替換圖案「按字母順序排列的檔案名稱清單」(參見檔案名稱擴充)。

此模式*將符合目前目錄中的每個檔案和目錄(不包括以 開頭的隱藏檔案.),而*/僅符合目錄(不包括隱藏目錄)。

此開關-d會停用目錄內容列表,但傳遞給 ls 的檔案仍會列出。

答案2

答案是:結尾/強制 ls 只看目錄。

請注意,行為是一致的(有和沒有-d)。

一個小測試:

mkdir /tmp/test
touch /tmp/test/a
mkdir /tmp/test/b
touch /tmp/test/b/c
cd /tmp/test

然後執行ls *ls */您會注意到其中的差異。

相關內容