web-dev-qa-db-ja.com

「。」のみを含むディレクトリを削除するにはどうすればよいですか。と '..'ですが、rmは空ではないと言いますか?

これら2つのファイルはOffice 2011のアーティファクトであり、「コンテンツ」ディレクトリの削除を妨げています。これらを削除するにはどうすればよいですか?

sh-3.2# ls -l -a
total 21496
drwx------+ 15 Beef  staff      480 Jan 14 23:32 .
drwxr-xr-x+ 19 Beef  staff      608 Jan 14 23:40 ..
-rw-r--r--@  1 Beef  staff    10244 Jan 10 10:36 .DS_Store
-rw-r--r--   1 Beef  staff        0 Dec 25 23:13 .localized
drwxrwxrwx  47 Beef  staff     1504 Jan  2 00:01 CSC119 - 1228
drwxrwxrwx   7 Beef  staff      224 Jan  1 22:50 Chris 1228
drwxrwxr-x@  3 Beef  staff       96 Aug 25  2010 Contents
drwxrwxrwx@  5 Beef  staff      1
sh-3.2# cd Contents
sh-3.2# ls -l -a
total 0
drwxrwxr-x@  3 Beef  staff   96 Aug 25  2010 .
drwx------+ 15 Beef  staff  480 Jan 14 23:32 ..

具体的には、上記の「。」コンテンツディレクトリの「..」ファイル。 Mac端末でbashシェルを使用しています。私は根です。

ありがとう!

sh-3.2# ls -a -l
total 21496
drwx------+ 15 Beef  staff      480 Jan 14 23:32 .
drwxr-xr-x+ 19 Beef  staff      608 Jan 15 00:19 ..
-rw-r--r--@  1 Beef  staff    10244 Jan 10 10:36 .DS_Store
-rw-r--r--   1 Beef  staff        0 Dec 25 23:13 .localized
drwxrwxrwx  47 Beef  staff     1504 Jan  2 00:01 CSC119 - 1228
drwxrwxrwx   7 Beef  staff      224 Jan  1 22:50 Chris 1228
drwxrwxr-x@  3 Beef  staff       96 Aug 25  2010 Contents
drwxrwxrwx@  5 Beef  staff      160 Dec 28 12:09 Lily 1228
drwxrwxrwx  29 Beef  staff      928 Jan  3 21:48 Old Dell Laptop
lrwxr-xr-x   1 Beef  staff       29 Dec 26 02:51 Relocated Items -> /Users/Shared/Relocated Items
-rwxrwxrwx@  1 Beef  staff  1554944 Jan  8  2019 SanDisk Flashback.pdf
drwxrwxrwx   4 Beef  staff      128 Jan  8  2019 SanDiskSecureAccess
-rwxrwxrwx   1 Beef  staff  8600360 Nov  4  2016 SanDiskSecureAccessV3.01_win.exe
drwxr-xr-x@  9 Beef  staff      288 Jan 10 11:41 Scanned Docs
drwxrwxrwx   4 Beef  staff      128 Dec 19 10:04 google
sh-3.2# rmdir Contents
rmdir: Contents: Directory not empty
sh-3.2# rmdir -p Contents
rmdir: Contents: Directory not empty

このディレクトリを削除するにはどうすればよいですか?

sh-3.2# ls -a -l
total 21496
drwx------+ 15 Beef  staff      480 Jan 14 23:32 .
drwxr-xr-x+ 19 Beef  staff      608 Jan 15 00:19 ..
-rw-r--r--@  1 Beef  staff    10244 Jan 10 10:36 .DS_Store
-rw-r--r--   1 Beef  staff        0 Dec 25 23:13 .localized
drwxrwxrwx  47 Beef  staff     1504 Jan  2 00:01 CSC119 - 1228
drwxrwxrwx   7 Beef  staff      224 Jan  1 22:50 Chris 1228
drwxrwxr-x@  3 Beef  staff       96 Aug 25  2010 Contents
drwxrwxrwx@  5 Beef  staff      160 Dec 28 12:09 Lily 1228
drwxrwxrwx  29 Beef  staff      928 Jan  3 21:48 Old Dell Laptop
lrwxr-xr-x   1 Beef  staff       29 Dec 26 02:51 Relocated Items -> /Users/Shared/Relocated Items
-rwxrwxrwx@  1 Beef  staff  1554944 Jan  8  2019 SanDisk Flashback.pdf
drwxrwxrwx   4 Beef  staff      128 Jan  8  2019 SanDiskSecureAccess
-rwxrwxrwx   1 Beef  staff  8600360 Nov  4  2016 SanDiskSecureAccessV3.01_win.exe
drwxr-xr-x@  9 Beef  staff      288 Jan 10 11:41 Scanned Docs
drwxrwxrwx   4 Beef  staff      128 Dec 19 10:04 google
sh-3.2# Sudo rm -r -f Contents
rm: Contents: Directory not empty

それでも削除されません。

10
nightanimal

あなたのディレクトリは空に見えますが、ls出力はisディレクトリのリンク数は2ではなく3であるため、そこにあるファイル(APFSファイルシステムの空のディレクトリのリンク数は2である必要があります)。

これは、ファイルシステムが一貫性のない状態になったことを意味し、おそらくfsckを実行する必要があります。 macOSでは、これは「ディスクユーティリティ」アプリを介してディスクの応急処置を実行することによって行われます。メインブートディスク(少なくともデフォルトでは「Macintosh HD」と呼ばれることが多い)に問題がある場合は、リカバリモードからこれを行う必要があります。

これが 私が遭遇したのと同じ問題 の場合は、まず可能性が高いであることを最初に確認して解決します最新バージョンのmacOS(2019年3月を過ぎたところ)がディスク上で救急処置をリカバリモードで実行する前。

を押すと回復モードになります Cmd+R マシンを再起動するとすぐに。リカバリモードになると、メニューから「ディスクユーティリティ」を実行する機会が表示されます。

31
Kusalananda

ディレクトリエントリ_._および_.._は、UNIXが小さなマシンで実行され、コードも同様に小さなものである必要があった1970年代初頭のアーティファクトです。

したがって、人々は_._および_.._という名前のディレクトリへの実際のハードリンクを作成しました。この悪い考えにより、空のディレクトリのハードリンク数は2になります。

今日、これはナンセンスであり、1988年以降のPOSIXの定義では、これらのエントリは存在する必要はありません。それらの動作をエミュレートする必要があります。つまり、パス名に_._または_.._が含まれている場合、ファイルシステムは正しい動作をする必要があるだけです。

最近のファイルシステムでは、ディレクトリに_._または_.._エントリがなく、空のディレクトリのハードリンクカウントが2ではありません。

ZFSはこの方法で実装されていますが、不適切に作成されたプログラムが失敗するのを防ぐために、履歴的な振る舞いを装って​​います。そのため、ZFSは_._および_.._をreaddir()とともに提供しますが、これらのエントリは存在しません。

現在のファイルシステムと過去のファイルシステムのどちらを使用していても、これらのエントリを削除することはできません。

今あなたのリンク数2 ....

歴史的なファイルシステムでは、OSは通常、リンク数が2を超えるディレクトリにはサブディレクトリがあるため、削除できないと考えています。

ディレクトリ内のリンク数が、リストされている拡張属性ファイルの非表示の「属性ディレクトリ」の結果ではない場合、これはファイルシステムのバグの結果である必要があります。

OSがunlinkの代わりにrmの代わりにrootプログラムを使用してそのディレクトリを削除できない場合、fsckを実行する必要があります。

9
schily

私の最初の推測では、ファイルは削除されていますが、実行中のプロセスによって開いたままになっています。使用する Sudo lsof | grep Contents-これにより、「コンテンツ」という単語を含む名前でファイルを開いているすべてのPIDが表示されます。ヘッダーを示す出力の最初の数行は次のとおりです。

$ Sudo lsof | head
COMMAND    PID  TID             USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd      1                  root  cwd       DIR              253,1      4096          2 /
systemd      1                  root  rtd       DIR              253,1      4096          2 /
...

ディレクトリで何かを開いたままにしているプロセスを取り除くと、それを削除できるようになります。

5
j4nd3r53n

再起動してみてください。削除されたファイルがContentsディレクトリで開いているプロセスがある可能性があります。再起動するとファイルが解放され、ディレクトリを削除できるようになります。

0
SimonP