我有一个/var/opt/gitlab/backups
具有以下权限的目录:
[user@localhost ~]$ sudo ls -la /var/opt/gitlab/backups
total 1316296
drwx------. 2 git root 63 1月 21 21:44 .
drwxr-xr-x. 21 root root 4096 1月 21 21:39 ..
-rw-------. 1 git git 1347880960 1月 21 21:44 1642819457_2022_01_21_14.1.2-ee_gitlab_backup.tar
现在以下命令不会删除任何内容
sudo rm -rf /var/opt/gitlab/backups/*
虽然以下命令会删除目录和其中的所有内容
sudo rm -rf /var/opt/gitlab/backups/
以下命令还将删除特定文件
sudo rm -rf /var/opt/gitlab/backups/1642819457_2022_01_21_14.1.2-ee_gitlab_backup.tar
只是文件通配符方式不起作用(不幸的是,这是我想要的)
但是我想要的只是删除里面的文件而不是删除目录。我怀疑这是因为权限设置,但更改权限不是我的选择。目录所有者和权限是由第三方软件自动设置的,我不想乱来。
有什么办法可以实现“删除目录内的所有文件,但不删除目录本身”的效果?
通配符由您的外壳扩展。为了
要工作,那么您必须有权列出
/var/opt/gitlab/backups/
. 例如,考虑作为非 root 用户,我运行以下命令:然后 shell 将 展开
*
到该目录中的非隐藏文件列表,然后echo
打印这些值。但是,如果我尝试对我无法访问的目录执行相同的操作:
shell 无权枚举内容,因此无法扩展
*
.如果您确实必须使用通配符,那么您可以尝试:
/bin/sh
这样,您就可以以 root 身份运行一个新的 shell ( )。该外壳将有权读取目录的内容,并可以扩展*
到内容。