执行chmod命令提示“No such file or directory”的问题排查
执行chmod命令提示“No such file or directory”的问题排查
嗨,我来帮你梳理这个命令的问题所在~
你的命令 chmod -R 775 /home/den/backup/*.sh 报错的核心原因是通配符的匹配范围不符合你的预期,具体细节和解决方法如下:
问题分析
- 你使用的
*.sh是shell通配符,它只会匹配/home/den/backup目录下直接存放的.sh文件,不会自动递归到子目录(比如你提到的shells目录)中查找。 - 如果
/home/den/backup目录下没有任何直接的.sh文件,shell会把*.sh当作一个字面路径处理,系统找不到这个不存在的路径,就会抛出“No such file or directory”错误。 - 另外,这里的
-R参数其实是多余的(甚至无效):-R是让chmod递归处理目录及其内容,但你原本的目标是修改.sh文件权限,不是目录,而且前提是路径必须存在才能生效。
解决方法
方法一:使用find命令(最通用,适合所有shell)
这是跨shell都能稳定工作的方案,能精准递归找到所有.sh文件并修改权限:
find /home/den/backup -type f -name "*.sh" -exec chmod 775 {} +
各部分说明:
-type f:确保只处理文件(避免误修改目录权限)-name "*.sh":匹配所有后缀为.sh的文件-exec chmod 775 {} +:把找到的所有文件批量传给chmod命令执行
方法二:利用globstar通配符(仅支持bash 4+、zsh等现代shell)
如果你的shell支持globstar特性(比如bash 4及以上版本),可以开启递归通配符来简化命令:
- 先开启globstar选项:
shopt -s globstar
- 再执行权限修改命令(注意这里不需要
-R):
chmod 775 /home/den/backup/**/*.sh
**通配符会递归匹配backup目录下所有层级的子目录,**/*.sh就能找到所有子目录中的.sh文件。
备注:内容来源于stack exchange,提问作者quill
相关产品推荐
相关产品推荐

