首页 > 解决方案 > 如何使用文件名中的通配符从 chown 递归中排除文件?

问题描述

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

我试过运行:

sudo chown -R user:apache /home/ !({ssl.cert.**,**/ssl.cert.**})

根据我在这个问题上的发现,它不起作用;(在Linux中执行文件操作即cp、mv、rm和chown等时如何排除文件夹

当我遇到错误时;

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

这是可行的吗?

标签: linuxbashcentos7rhel7

解决方案


chown -R不会对您传入的内容执行任何解释。任何尝试使用类似的东西!(...)都由 shell 解释。如果您想在递归中支持花哨的逻辑,请使用以下内容find

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

推荐阅读