Saya membatalkan untar file tar yang korup, dan berhasil berakhir dengan beberapa direktori yang tidak dapat saya hapus, Jika saya mencoba menghapusnya, sepertinya tidak dapat ditemukan, tetapi ls
menunjukkannya ada, baik dengan bash dan dengan python saya dapatkan perilaku serupa, kecuali tepat setelah saya mencoba menghapusnya rm -rf
, ls
mengeluh tidak dapat menemukannya, lalu mencantumkannya (lihat di bawah setelah rm -rf
). The find
perintah menunjukkan file hadir, tapi masih saya tidak bisa memikirkan cara untuk menghapusnya.
Inilah usaha saya:
Di sini Anda melihat keduanya ls
dan find
setuju kami memiliki direktori,
rl]$ ls
mikeaâ??cnt
rl]$ find -maxdepth 1 -type d -empty -print0
./mikeaâcnt
Tapi saya tidak bisa menghapusnya:
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
Saya bisa cd
melakukannya dan itu kosong:
rl]$ cd mikeaâ^Á^Äcnt/
mikeaâ^Á^Äcnt]$ ls
mikeaâ^Á^Äcnt]$ pwd
.../rl/mikeaâcnt
mikeaâ^Á^Äcnt]$ cd ../
rl]$ ls
mikeaâ??cnt
lihat di bawah ini bahwa ini bukan file sederhana tetapi direktori, dan ls
berperilaku lucu setelah rm -rf
dikatakan tidak dapat menemukan file kemudian daftar langsung setelah:
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]$
Jadi ini adalah percobaan dengan python, file ditemukan, tetapi namanya tidak dapat digunakan sebagai nama yang dapat dihapus:
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'
bahkan ketika saya menggunakan penyelesaian tab nama yang diambil tidak dapat digunakan:
rl]$ rm -rf mikeaâ^Á^Äcnt
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
menggunakan nama yang ditampilkan python dengan bash saya mendapatkan ini:
rl]$ rm -rf "mikea\xc3\xa2\xc2\x81\xc2\x84cnt"
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
Apakah ada yang bisa saya lakukan untuk menghilangkan dir yang korup ini? Filesystem yang mendasari (NFS) tampaknya fungsional dan tidak ada masalah lain yang dilaporkan, dan saya tidak punya masalah sampai file tar rusak.
EDIT: Berikut ini menggunakan opsi find
sendiri -exec
untuk meneleponrm
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]$
tetapi file tersebut masih ada, ( ls
mengeluh tidak dapat menemukannya, tetapi kemudian menunjukkannya)
EDIT ke-2:
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
Perilaku masih tidak berubah, file masih ada
EDIT ke-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
Tampaknya ada lebih banyak nama daripada mikeaâcnt
melihat output dari upaya python mikea\xc3\xa2\xc2\x81\xc2\x84cnt
, dan tangkapan layar ini:
Edisi ke-4: Ini adalah upaya dengan kartu liar:
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
dan lokal saya:
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=
Edit ke-5:
rl]$ ls -i
ls: cannot access mikeaâcnt: No such file or directory
? mikeaâ??cnt
tetapi juga perilaku telah berubah, sekarang ls
dan cd
lakukan ini:
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.
Ini telah terjadi setelah upaya untuk menghapus, saya berpikir bahwa itu mungkin masalah NFS seperti yang disarankan dalam salah satu jawaban di sini oleh vinc17.
EDIT 6: Ini adalah output dari lsof
danls -a
rl] $ / usr / sbin / lsof mikeaâ ^ Á ^ Äcnt lsof: kesalahan status pada mikea \ xc2 \ x81 \ xc2 \ x84cnt: Tidak ada file atau direktori seperti itu
di atas salah, di sini adalah lsof
doa yang benar : (rl adalah direktori induk)
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
Sunting ke-7: pindah tidak akan berfungsi, (saya sudah mencoba sebelum semua ini, tapi saya tidak menyimpan output), tetapi memiliki masalah yang sama seperti ls
dan rm
dengan file.
8 EDIT: ini menggunakan karakter hex seperti yang disarankan:
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]$
Edit ke-9: untuk stat
perintah:
rl]$ stat mikeaâ^Á^Äcnt
stat: cannot stat `mikeaâ\302\201\302\204cnt': No such file or directory
rl]$
Tampaknya bahkan lebih mungkin dari semua output, ada bug atau perilaku NFS lainnya seperti yang disarankan dalam komentar.
Sunting 10: Ini adalah strace output di intinya karena begitu besar, ini adalah output atau dua perintah ini:
strace -xx rmdir ./* | grep -e '-1 E'`
strace -xx -e trace=file ls -li`
https://gist.github.com/mikeatm/e07fa600747a4285e460
Sunting 11: Jadi sebelum di atas rmdir
saya perhatikan bahwa saya bisa cd
masuk ke direktori, tetapi setelah itu rmdir
saya tidak bisa cd
lagi, mirip dengan kemarin. The .
dan ..
file yang hadir:
rl]$ ls
mikeaâ??cnt
rl]$ cd mikeaâ^Á^Äcnt/
mikeaâ^Á^Äcnt]$ ls
mikeaâ^Á^Äcnt]$ ls -a
. ..
mikeaâ^Á^Äcnt]$ cd ../
Edit Terakhir: Saya melihat admin lokal dan ini ditangani dengan masuk ke server itu sendiri dan menghapus dari sana. Penjelasan dari mereka adalah bahwa itu bisa menjadi masalah dengan set karakter di nama yang tidak pantas.
mv
. mungkin Anda bisa menghapusnya setelah itu. Atau, Anda dapat mencoba memindahkan direktori ke tingkat folder yang lebih dalam (mungkin dengan wildcard) dan kemudian menghapus folder tempat Anda memindahkannya.
find
output ke perintah yang berbeda alih-alih hanya menggunakanexec
opsi itu?