Linux 如何使用文件名中的通配符从chown recursive中排除文件?

Linux 如何使用文件名中的通配符从chown recursive中排除文件?,linux,bash,centos7,rhel7,Linux,Bash,Centos7,Rhel7,我想在文件夹上递归运行chown,但我不想包含名为“ssl.cert.webmintmp.26599”或“ssl.cert.webmintmp.356849”,因此我需要用通配符替换结尾的数字。而且该文件之前的文件夹应该是通配符,因为有几个不同的文件夹名称 我试过跑步: sudo chown -R user:apache /home/ !({ssl.cert.**,**/ssl.cert.**}) 根据我在这个问题上的发现,这是行不通的;() 当我犯错误时 ./chowntest.sh: li

我想在文件夹上递归运行
chown
,但我不想包含名为
“ssl.cert.webmintmp.26599”
“ssl.cert.webmintmp.356849”
,因此我需要用通配符替换结尾的数字。而且该文件之前的文件夹应该是通配符,因为有几个不同的文件夹名称

我试过跑步:

sudo chown -R user:apache /home/ !({ssl.cert.**,**/ssl.cert.**})
根据我在这个问题上的发现,这是行不通的;()

当我犯错误时

./chowntest.sh: line 2: syntax error near unexpected token `('
./chowntest.sh: line 2: `sudo chown -R user:apache /home/ !({ssl.cert.**,**/ssl.cert.**})'

这可行吗?

chown-R
不会对您传入的内容执行任何解释。任何使用
之类的东西的尝试!(…)
由shell解释。如果希望在递归中支持奇特的逻辑,请使用类似于
find

find /home ! -name 'ssl.cert.*' -exec chown user:apache '{}' \;

您是否考虑过运行
find-exec chown…
chown-R
简单地递归作为参数传递的directori;没有排除设施。我支持使用
find
代替的建议。错误消息看起来好像您没有启用
extglob
,但它对
chown-R
没有任何帮助。@LuisFelipe。恭喜你,除了选择答案,你现在已经有足够的声望去投票了!
find
命令似乎比
chown
命令花费的时间要长得多,这就是为什么我想知道是否可以不用它。