ターミナルでディレクトリを削除しようとしましたが、機能しません。
myuser$ rm -rf foo/
rm: foo/: Directory not empty
私のメインディレクトリにはfooしかありません:
myuser$ ls
foo
'ls-la'コマンドに問題はありません。
myuser$ ls -la
drwxrwxrwx@ 1 myuser staff 65536 1 mai 10:53 .
drwxrwxrwx@ 1 myuser staff 32768 28 aoû 2013 ..
drwxrwxrwx 1 myuser staff 32768 1 mai 10:36 foo
ディレクトリfooは空のようです:
myuser$ ls foo/
myuser$ ls -la foo/
ls: : No such file or directory
total 192
drwxrwxrwx 1 myuser staff 32768 1 mai 10:36 .
drwxrwxrwx@ 1 myuser staff 65536 1 mai 10:53 ..
しかし、「ls ::そのようなファイルやディレクトリはありません」という行は奇妙です。そして、それが私がこのディレクトリを削除できない理由だと思います。 「lsfoo」が何かがあるように空の行を返すこともわかりましたが、何ですか?そして、どのようにそれを削除しますか?
ありがとう
foo
ディレクトリに、名前に印刷できない文字が含まれているファイルがあると思います。 ls
出力のseeの文字を実際の文字ls
outputsと比較します。
cd foo
ls # you see what your terminal lets you see
ls | od -a # you see the character codes *really* coming from ls
名前が簡単に表示または入力できないファイルを削除するには、さまざまな方法があります。ここでは、rmのインタラクティブな-i
オプションを使用できます。
cd foo
rm -i *
明らかに、これには注意してください。そして、削除したいものにのみy
と言ってください。
最初のrm -rf
がそれを削除しなかった理由について...あなたはrmエイリアスを持っているのだろうか? alias rm
を使用して確認してください。 \rm -rf foo
を使用して、(エイリアスをバイパスして)rmの実際のバージョンを一時的に実行できます。
「ディレクトリが空ではありません」というメッセージは、かなり誤解を招く恐れがあります。通常、rm -rf
はディレクトリ内のすべてを再帰的に削除するため、空であるかどうかは関係ありません。
この場合、確認したいことがいくつかあります。
df -h
でマウントされているものがあるかどうかを確認し、必要に応じてマウントを解除してくださいSudo lsof foo
を実行して、アプリケーションによって開かれているファイルがあるかどうかを確認し、必要に応じてアプリケーションを終了してみてくださいSudo rm -rf foo
を試してください–おそらくあなたは権限を持っていないだけです(私はここではそうではないと思いますが)コマンド
rm -rf dir
隠しファイルを削除しませんつまりドットで始まるファイル、たとえば。bashrc。 ディレクトリが空ではありません診断は、いくつかの隠しファイルがあることを意味します。
ls -a
またはi番目
ls .*
あなたはそれらを再帰的に消去することができます
rm -rf .[a-Z]*
その後、問題のあるディレクトリをrmdirすることができます。
編集:
次の編集は私のポイントを証明します:
root@rasal:/tmp# mkdir ttp
root@rasal:/tmp# cd ttp
root@rasal:/tmp/ttp# touch .test
root@rasal:/tmp/ttp# ls -a
. .. .test
root@rasal:/tmp/ttp# rm -rf *
root@rasal:/tmp/ttp# ls -a
. .. .test
root@rasal:/tmp/ttp#