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/