私は破損したtarファイルを解凍し、削除できないディレクトリで終わることができました。削除しようとすると、見つからないようですが、ls
bashとpythonの両方で表示されます右以外は同様の挙動、私はそれを削除しようとした後rm -rf
、 ls
それは(後に以下を参照してくださいそれを示しています、それはそれを見つけることができません不平を言いますrm -rf
)。find
コマンドショーファイルが存在しているが、それでも私はそれを削除する方法を考えることはできません。
私の試みは次のとおりです。
ここでは、両方を見るls
と、find
私たちは、ディレクトリを持って同意し、
rl]$ ls
mikeaâ??cnt
rl]$ find -maxdepth 1 -type d -empty -print0
./mikeaâcnt
しかし、私はそれを削除することはできません:
rl]$ find -maxdepth 1 -type d -empty -print0 | xargs -0 rm -f -v
rm: cannot remove `./mikeaâ\302\201\302\204cnt': Is a directory
rl]$ ls
mikeaâ??cnt
私はcd
それができますが、空です:
rl]$ cd mikeaâ^Á^Äcnt/
mikeaâ^Á^Äcnt]$ ls
mikeaâ^Á^Äcnt]$ pwd
.../rl/mikeaâcnt
mikeaâ^Á^Äcnt]$ cd ../
rl]$ ls
mikeaâ??cnt
その下に、単純なファイルが、ディレクトリ、プラスではありません参照ls
おかしい後に振る舞うrm -rf
、それはファイルを見つけることができないと言うことは、その後の後にまっすぐにそれを示しています。
rl]$ rm mikeaâ^Á^Äcnt/
rm: cannot remove `mikeaâ\302\201\302\204cnt/': Is a directory
rl]$ rm -rf mikeaâ^Á^Äcnt/
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
rl]$
したがって、これはPythonでの試みであり、ファイルは見つかりましたが、名前は削除可能な名前として使用できません:
rl]$ python
Python 2.6.6 (r266:84292, Jul 10 2013, 22:48:45)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> import shutil
>>> os.listdir('.')
['mikea\xc3\xa2\xc2\x81\xc2\x84cnt']
>>> shutil.rmtree(os.listdir('.')[0] )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.6/shutil.py", line 204, in rmtree
onerror(os.listdir, path, sys.exc_info())
File "/usr/lib64/python2.6/shutil.py", line 202, in rmtree
names = os.listdir(path)
OSError: [Errno 2] No such file or directory: 'mikea\xc3\xa2\xc2\x81\xc2\x84cnt'
タブ補完を使用する場合でも、タブ補完が使用する名前は使用できません。
rl]$ rm -rf mikeaâ^Á^Äcnt
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
Pythonがbashで表示する名前を使用すると、これが得られます:
rl]$ rm -rf "mikea\xc3\xa2\xc2\x81\xc2\x84cnt"
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
この破損したディレクトリを取り除くためにできることはありますか?基礎となるファイルシステム(NFS)は機能しているようで、他の問題は報告されていません。また、tarファイルが破損するまでそのような問題はありませんでした。
編集:ここに呼び出すためにfind
独自の-exec
オプションを使用していますrm
rl]$ find -maxdepth 1 -type d -empty -exec rm -f {} \;
find: `./mikeaâ\302\201\302\204cnt': No such file or directory
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
rl]$
しかし、ファイルはまだそこにあります(ls
見つけられないと文句を言いますが、とにかくそれを表示します)
2nd EDIT:
rl]$ find -maxdepth 1 -type d -empty -exec rm -rf {} \;
find: `./mikeaâ\302\201\302\204cnt': No such file or directory
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
動作はまだ変更されておらず、ファイルはまだ存在しています
3番目の編集:
rl]$ ls
mikeaâ??cnt
rl]$ find -maxdepth 1 -type d -empty -exec rm -rf {} +
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
名前にmikeaâcnt
は、Pythonの試行の出力を見るだけで なくmikea\xc3\xa2\xc2\x81\xc2\x84cnt
、このスクリーンショットよりも多くのものがあるようです:
4番目の編集:これはワイルドカードを使用した試みです。
rl]$ echo *
mikeaâcnt
rl]$ echo mike*
mikeaâcnt
rl]$ rm -rf mike*
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
と私のロケール:
rl]$ locale
LANG=en_US.utf8
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=
5番目の編集:
rl]$ ls -i
ls: cannot access mikeaâcnt: No such file or directory
? mikeaâ??cnt
動作も変更されました。今ls
、cd
これを実行してください:
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
rl]$ cd mikeaâ^Á^Äcnt
mikeaâcnt: No such file or directory.
これは、削除を試行した後に発生しました。vinc17の回答の1つで提案されているように、NFSの問題であると考えています。
第六EDIT:これは、の出力であるlsof
とls -a
rl] $ / usr / sbin / lsofmikeaâ^Á^Äcntlsof:mikeaâ\ xc2 \ x81 \ xc2 \ x84cntのステータスエラー:そのようなファイルまたはディレクトリはありません
上記は間違っています、正しいlsof
呼び出しです:(rlは親ディレクトリです)
rl]$ /usr/sbin/lsof | grep mike | grep rl
tcsh 11926 mike cwd DIR 0,33 4096 19569249 /home/mike/mish/rl
lsof 14733 mike cwd DIR 0,33 4096 19569249 /home/mike/mish/rl
grep 14734 mike cwd DIR 0,33 4096 19569249 /home/mike/mish/rl
grep 14735 mike cwd DIR 0,33 4096 19569249 /home/mike/mish/rl
lsof 14736 mike cwd DIR 0,33 4096 19569249 /home/mike/mish/rl
rl]$
rl]$ ls -a
ls: cannot access mikeaâcnt: No such file or directory
. .. mikeaâ??cnt
7番目の編集:移動は機能しません(この前に試しましたが、出力を保存しませんでした)が 、ファイルls
と同じ問題がありrm
ます。
8番目の編集:これは、提案されているように16進文字を使用しています。
rl]$ ls --show-control-chars | xxd
0000000: 6d69 6b65 61c3 a2c2 81c2 8463 6e74 0a mikea......cnt.
rl]$ rmdir $'mikea\6d69\6b65\61c3\a2c2\81c2\8463\6e74\0acnt'
rmdir: failed to remove `mikea\006d69\006b651c3\a2c2\\81c2\\8463\006e74': No such file or directory
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
rl]$
9番目の編集:stat
コマンドの場合:
rl]$ stat mikeaâ^Á^Äcnt
stat: cannot stat `mikeaâ\302\201\302\204cnt': No such file or directory
rl]$
それはすべての出力からさらに可能性が高いようです。コメントで示唆されているように、バグまたは他のNFSの誤動作があります。
編集10:これは非常に大きいため、出力またはこれらの2つのコマンドであるため、要旨のstrace出力です。
strace -xx rmdir ./* | grep -e '-1 E'`
strace -xx -e trace=file ls -li`
https://gist.github.com/mikeatm/e07fa600747a4285e460
編集11:上記の前に、 rmdir
私cd
はディレクトリに入ることができることに気づきましたが、昨日と同様に、再びrmdir
できませんでしcd
た。.
そして..
ファイルが存在していました:
rl]$ ls
mikeaâ??cnt
rl]$ cd mikeaâ^Á^Äcnt/
mikeaâ^Á^Äcnt]$ ls
mikeaâ^Á^Äcnt]$ ls -a
. ..
mikeaâ^Á^Äcnt]$ cd ../
最終編集:これについてローカル管理者を見ましたが、サーバー自体にログオンしてそこから削除することで対処しました。彼らからの説明は、名前の文字セットが不適切であることが問題になる可能性があるということです。
mv
です。あとで削除できます。または、ディレクトリをより深いフォルダレベル(おそらくワイルドカードを使用)に移動してから、移動先のフォルダを削除してみてください。
find
を単に使用するのではなく、別のコマンドに出力をパイプする理由はありexec
ますか?