为什么通配符在`sudo rm`语句中不起作用?

Leo*_*Shi 4 bash shell sudo wildcard

我试图删除日志目录中的所有文件,并在CentOS 6.5上使用默认的bash shell

[lei@ids7gueywjZ /]$ sudo ls -al /var/log/jenkins/
total 1541512
drwxr-x---   2 jenkins jenkins       4096 Jul 22 09:52 .
drwxr-xr-x. 10 root    root          4096 Jul 14 21:27 ..
-rw-r--r--   1 jenkins jenkins      31483 Jul 22 17:07 jenkins.log
-rw-r--r--   1 jenkins jenkins 1073606656 Jul 18 03:16 jenkins.log-20150718
-rw-r--r--   1 jenkins jenkins  504815011 Jul 19 03:30 jenkins.log-20150719.gz
[lei@ids7gueywjZ /]$ sudo rm -r /var/log/jenkins/*
rm: cannot remove `/var/log/jenkins/*': No such file or directory
Run Code Online (Sandbox Code Playgroud)

我不明白为什么rm -r /var/log/jenkins/*不起作用?我缺少一些默认的shell配置吗?

Dev*_*lar 12

通配符扩展由shell完成,而不是由rm.

并且shell没有sudo权限,只有rm.

因此,由于shell没有读取权限/var/log/jenkins,因此没有扩展,并rm尝试删除不存在的文件(不是通配符)/var/log/jenkins/*.

要解决这个问题,您需要一个具有执行权限的shell:sudorm

sudo sh -c 'rm /var/log/jenkins/*'
Run Code Online (Sandbox Code Playgroud)