/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
ファイルワイルドカード方式は機能しません(残念ながらそれが私が望むものです)
しかし、私が望むのは、ディレクトリを削除せずに内部のファイルだけを削除することです。権限の設定によるもののようですが、権限の変更は私にとってオプションではありません。ディレクトリの所有者と権限はサードパーティ製のソフトウェアによって自動的に設定されるため、混乱したくありません。
「ディレクトリ内のすべてのファイルを削除しますが、ディレクトリ自体は削除しない」という効果を得る方法はありますか?
答え1
ワイルドカードはシェルによって拡張されます。 ~のため
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
その後、シェルは*
そのディレクトリに隠されていないファイルのリストを展開し、echo
その値を印刷します。
ただし、アクセスできないディレクトリに対して同じことをしようとすると、次のようになります。
$ echo /root/*
/root/*
シェルにはコンテンツを列挙する権限がないため、拡張できません*
。
本当にワイルドカードを使用する必要がある場合は、次のことを試すことができます。
$ sudo /bin/sh -c 'rm -rf /var/opt/gitlab/backups/*'
このようにして、/bin/sh
新しいシェル()をrootとして実行できます。シェルはディレクトリの内容を読み取る権限を持ち、*
ディレクトリに拡張できます。