如何在 bash 脚本中选择没有扩展名的文件?

ped*_*ram 6 bash shell-script wildcards

假设我在当前目录中有文件 xinitrc、alphabetsoup、ieat.pie。需要一个 bash 脚本来仅选择 xinitrc 和字母汤。

ric*_*ici 7

bash 扩展 glob+([^.])将匹配.名称中没有任何文件的文件。它要求您没有取消设置shopt extglob(在现代 bash 安装中,它应该默认设置)。该模式意味着:

任意数量(但至少一个)字符,除了 .

您可以将所有文件名放在一个数组中:

NO_EXTENSION=( +([^.]) )
Run Code Online (Sandbox Code Playgroud)

您可以打印文件名:

printf "%s\n" +([^.])
Run Code Online (Sandbox Code Playgroud)

或者将它们全部传递给实用程序:

ls -- +([^.])
Run Code Online (Sandbox Code Playgroud)

如果您希望它们在变量中而不是数组中,则需要非常确定文件名中没有空格。如果你绝对肯定这一点,你可以这样做:

NO_EXTENSION=$(echo +([^.]))
Run Code Online (Sandbox Code Playgroud)

与数组情况不同,需要调用 echo 才能进行路径名扩展。我强烈建议对此类列表使用数组,因为您不必担心文件名中的特殊字符。


Dra*_*oan 5

您可以使用以下命令获取工作目录中名称中没有句号的文件列表:

find . -maxdepth 1 ! -name "*.*"
Run Code Online (Sandbox Code Playgroud)

您还可以拥有.fileunix 下的文件,如果您想匹配那些 and file,但不匹配,file.ext则可以使用:

find . -maxdepth 1 ! -name "*.*" -o -name ".*[^.]*"
Run Code Online (Sandbox Code Playgroud)