Bash 通过通配符选择任何不带扩展名的文件名

Bash 通过通配符选择任何不带扩展名的文件名

bash 如何通过通配符选择任何不带扩展名的文件名,因为它会以失败告终?例如

$ ls /source/c
m m.asm m.c m.d m-0 m-1 

$ cp -ru /source/c/*. ~/Downloads/c
cp: cannot stat '/source/c/*.': No such file or directory

仅复制 m m-0 m-1

请帮忙 !非常高兴,谢谢。

答案1

如果您想避免使用带点的文件名,请使用扩展的 glob 表达式!(*.*)而不是*.

cp -ru /source/c/!(*.*) ~/Downloads/c/

在 Bash 中,这是由extglob选项控制的,因此如果出现错误,则必须使用 来打开它shopt -s extglob。如果您想关闭它,请使用shopt -u extglob

如果想要复制隐藏文件(您还需要 )shopt -s dotglob,您可能还需要排除文件名,例如.bashrc可能被视为没有扩大(Unix 中一个没有明确定义的概念):

cp -ru /source/c/!(?*.*) ~/Downloads/c/

相关内容