1. ホーム
  2. バッシュ

[解決済み] .gitフォルダを削除しようとすると、'rm -r .git -force'が機能しない

2022-03-11 05:46:16

質問

rm -r .git
rm -r .git --force

以下のように表示され、「はい」を入力して次に進むと、終わりのない供給があるようです。

override r--r--r--  redacted/staff for .git/objects/95/90087aa4b351e278e6e53ff6240045ab2db6d1?

解決方法は?

解析と解説。

メッセージ override r--r--r-- ...? は、一部のバージョンの rm コマンドで、書き込み権限が削除されたファイルやファイルを削除しようとしたときに表示されます。

再現するには

▶ mkdir -p foo/{bar,baz} ; touch foo/bar/qux 
▶ chmod -R -w foo 
▶ find foo -ls 
4305147410        0 dr-xr-xr-x    4 alexharvey       wheel                 128 24 Mar 18:19 foo
4305147412        0 dr-xr-xr-x    2 alexharvey       wheel                  64 24 Mar 18:19 foo/baz
4305147411        0 dr-xr-xr-x    3 alexharvey       wheel                  96 24 Mar 18:19 foo/bar
4305147413        0 -r--r--r--    1 alexharvey       wheel                   0 24 Mar 18:19 foo/bar/qux

ここで、これらのファイルを削除しようとすると、本当にこのファイルモードを上書きするかどうか尋ねられます。

▶ rm -r foo
override r-xr-xr-x  alexharvey/wheel for foo/baz? 

また、Mac OS X やその他の BSD 変種を使用している場合、そのように見えるかもしれませんが、その場合は --force をコマンドラインの末尾に追加すると、削除する追加ファイルの名前として解釈されるため、正しくありません。

しかし、それを修正しても、-fはr--r--r--を上書きすることができない。そのかわり、こうなる。

▶ rm -rf foo       
rm: foo/baz: Permission denied
rm: foo/bar/qux: Permission denied
rm: foo/bar: Permission denied
rm: foo: Directory not empty


修正箇所です。

この問題を解決するには、まず、フォルダ内の書き込み権限を元に戻します。

▶ chmod -R +w foo

そうすると、rm -r でうまくいくはずです。

▶ rm -r foo
▶ ls foo 
ls: foo: No such file or directory

こちらもご覧ください。

  • この に関する質問は Unix &; Linux Stack Exchange をご覧ください。
  • BSD rm のソースコード こちら .