Shell

僅列出目前目錄中的正常文件(但不列出目錄)

  • August 10, 2020

我可以ls -ld */用來列出目前目錄中的所有目錄條目。是否有類似簡單的方法來列出目前目錄中的所有正常文件?我知道我可以使用 find

find . -maxdepth 1 -type f

或統計

stat -c "%F %n" * | grep "regular file" | cut -d' ' -f 3-

但這些並沒有讓我覺得過於優雅。有沒有一種簡單的方法來只列出正常文件(我不關心設備、管道等)而不是目前目錄的子目錄?列出符號連結也是一個優點,但不是必需的。

使用zshGlob 限定符,您可以輕鬆地直接表達它,例如:

echo *(.)

根據您的配置,將僅返回正常文件列表或錯誤。

對於非目錄:

echo *(^/)

(將包括符號連結(包括到目錄)、命名管道、設備、套接字、門……)

echo *(-.)

用於正常文件和正常文件的符號連結。

echo *(-^/)

對於非目錄,也沒有指向目錄的符號連結。

D此外,如果要包含D ot 文件(隱藏文件),請參閱globbing 限定符,例如*(D-.).

ls -p | grep -v / 

此命令列出所有非目錄的非隱藏文件(正常文件、連結、設備文件等)。要同時包含隱藏文件,請將-A選項添加到ls

它假定所有文件的名稱中都沒有換行符。添加-q選項 tols會將所有不可列印的字元(包括換行符)轉換為?,確保它們在一行上,因此適合饋送到基於行的實用程序(如grep在終端上列印)。

引用自:https://unix.stackexchange.com/questions/48492