Linux
sudo rm -rf directory/* 不適用於某些權限設置
我有一個
/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
只是文件萬用字元方式不起作用(不幸的是,這是我想要的)
但是我想要的只是刪除裡面的文件而不是刪除目錄。我懷疑這是因為權限設置,但更改權限不是我的選擇。目錄所有者和權限是由第三方軟體自動設置的,我不想亂來。
有什麼辦法可以實現“刪除目錄內的所有文件,但不刪除目錄本身”的效果?
萬用字元由您的外殼擴展。為了
rm /var/opt/gitlab/backups/*
要工作,那麼您必須有權列出
/var/opt/gitlab/backups/
. 例如,考慮作為非 root 使用者,我執行以下命令:$ echo /var/* /var/cache /var/db /var/empty /var/lib /var/lock /var/log /var/mail /var/run /var/spool /var/svc.d /var/tmp
然後 shell 將 展開
*
到該目錄中的非隱藏文件列表,然後echo
列印這些值。但是,如果我嘗試對我無法訪問的目錄執行相同的操作:
$ echo /root/* /root/*
shell 無權列舉內容,因此無法擴展
*
.如果您確實必須使用萬用字元,那麼您可以嘗試:
$ sudo /bin/sh -c 'rm -rf /var/opt/gitlab/backups/*'
/bin/sh
這樣,您就可以以 root 身份執行一個新的 shell ( )。該外殼將有權讀取目錄的內容,並可以擴展*
到內容。