Shell
僅列出目前目錄中的正常文件(但不列出目錄)
我可以
ls -ld */
用來列出目前目錄中的所有目錄條目。是否有類似簡單的方法來列出目前目錄中的所有正常文件?我知道我可以使用 findfind . -maxdepth 1 -type f
或統計
stat -c "%F %n" * | grep "regular file" | cut -d' ' -f 3-
但這些並沒有讓我覺得過於優雅。有沒有一種簡單的方法來只列出正常文件(我不關心設備、管道等)而不是目前目錄的子目錄?列出符號連結也是一個優點,但不是必需的。
使用
zsh
和Glob 限定符,您可以輕鬆地直接表達它,例如:echo *(.)
根據您的配置,將僅返回正常文件列表或錯誤。
對於非目錄:
echo *(^/)
(將包括符號連結(包括到目錄)、命名管道、設備、套接字、門……)
echo *(-.)
用於正常文件和正常文件的符號連結。
echo *(-^/)
對於非目錄,也沒有指向目錄的符號連結。
D
此外,如果要包含D ot 文件(隱藏文件),請參閱globbing 限定符,例如*(D-.)
.
ls -p | grep -v /
此命令列出所有非目錄的非隱藏文件(正常文件、連結、設備文件等)。要同時包含隱藏文件,請將
-A
選項添加到ls
它假定所有文件的名稱中都沒有換行符。添加
-q
選項 tols
會將所有不可列印的字元(包括換行符)轉換為?
,確保它們在一行上,因此適合饋送到基於行的實用程序(如grep
在終端上列印)。