Bash 移动不带';t匹配(如果匹配)

Bash 移动不带';t匹配(如果匹配),bash,Bash,我尝试筛选一些不想复制到其他文件夹的文件(在本例中为a123*.zip),并希望复制所有其他*.zip文件 if [[ ! -f ./a123*.zip ]]; then # copy all files without a123*.zip fi 如何触发复制?您可以在此处使用extglob: shopt -s extglob cp !(a123*.zip) /destination 如果要复制除a123*.zip之外的所有*.zip文件,请使用:(谢谢@kojiro) 不过

我尝试筛选一些不想复制到其他文件夹的文件(在本例中为
a123*.zip
),并希望复制所有其他
*.zip
文件

if [[ ! -f ./a123*.zip ]];  
then 
    # copy all files without a123*.zip 
fi

如何触发复制?

您可以在此处使用
extglob

shopt -s extglob
cp !(a123*.zip) /destination
如果要复制除
a123*.zip
之外的所有
*.zip
文件,请使用:
(谢谢@kojiro)


不过,这将不仅仅匹配
*.zip
文件。我想你想要
!(a123*).zip
,是吗?但没有操作写入:
复制所有没有a123*.zip的文件
,但如果只复制
*.zip
,则是
!(a123*)。zip是正确的glob模式。很高兴知道它对您有效,但我不会将其归类为
“脏”
解决方案:)请不要@kojiro感谢链接。这是有道理的。我更新了我的答案,用一种更好的方法来选择文件。但是
find
并没有像同一篇文章中所说的那样更好。至少,您需要使用
-print0
标志或小心地控制分隔符。嘿,在更新2中,您需要引用那些通配符(以及
$destination
)!你知道shell用通配符做什么吗?@gniourf_gniourf是的,我知道shell用通配符做什么。出于某种原因,在我的测试中,我没有看到任何差异。我同意逃离通配符更安全。经过一番思考后,我决定这不是一个骗局——链接的问题是关于
ls
。由于将
ls
用于编程解决方案是不合适的,因此该问题的答案不适合回答此问题。因此,我认为这不是一个骗局。而且@devnull是的,那个人是一个更好的候选人。如果可以的话,我会改变投票结果。
cp !(a123*).zip /destination
find . -maxdepth 1 -type f -and name \*.zip -not -name a123\*.zip -exec cp "{}" "$destination"