Bir bozuk tar dosyasını asfaltlanmaış ve bunu silmeye çalışırsanız ben silemezsiniz bazı dizinde ile bitirmek başardı, bu bulunamaz gibi görünüyor, ama lsgösterileri bash ile ve ben olsun piton ile hem 's hediye, benzer davranış, onu silmeye çalıştıktan hemen sonra rm -rf, lsbulamadığından şikayet eder, sonra listeler (sonradan aşağıya bakın rm -rf). findKomut gösterileri dosya mevcut olduğunu, ancak yine de bunu silmek için bir yol düşünemiyorum.
İşte girişimlerim:
Burada ikisini de görüyorsunuz lsve bir findrehberimiz olduğuna katılıyoruz,
rl]$ ls
mikeaâ??cnt
rl]$ find -maxdepth 1 -type d -empty -print0
./mikeaâcnt
Ancak silemiyorum:
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
cdYine de yapabilirim ve boş:
rl]$ cd mikeaâ^Á^Äcnt/
mikeaâ^Á^Äcnt]$ ls
mikeaâ^Á^Äcnt]$ pwd
.../rl/mikeaâcnt
mikeaâ^Á^Äcnt]$ cd ../
rl]$ ls
mikeaâ??cnt
aşağıya bakın basit bir dosya değil, bir dizin, artı dosyayı bulamadığı lssöylendikten sonra komik davranır , rm -rfsonra da hemen sonra listeler:
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]$
Yani bu python girişimidir, dosya bulunur, ancak isim silinebilecek bir isim olarak kullanılamaz:
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'
sekme tamamlama kullandığımda bile, seçtiği isim kullanılamaz:
rl]$ rm -rf mikeaâ^Á^Äcnt
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
python'un bash ile gösterdiği ismi kullanarak şunu alıyorum:
rl]$ rm -rf "mikea\xc3\xa2\xc2\x81\xc2\x84cnt"
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
Bu bozuk direkten kurtulmak için yapabileceğim bir şey var mı? Temel dosya sistemi (NFS) işlevsel görünüyor ve başka bir sorun bildirilmedi ve bozuk tar dosyasına kadar böyle bir sorun yaşamadım.
EDIT: İşte aramak için findkendi -execseçeneğini kullanıyorrm
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]$
ancak dosya hala orada, ( lsbulamıyor ancak şikayet ederse yine de gösteriyor)
2. 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
Davranış hala değişmedi, dosya hala mevcut
3. EDIT:
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
Adı mikeaâcnt, python girişiminin çıktısına bakmaktan daha çok görünüyor mikea\xc3\xa2\xc2\x81\xc2\x84cntve bu ekran görüntüsü:

4. EDIT: Bu bir joker kartla yapılan denemedir:
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
ve yerel ayarım:
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. Düzenleme:
rl]$ ls -i
ls: cannot access mikeaâcnt: No such file or directory
? mikeaâ??cnt
ama aynı zamanda davranış değişti, şimdi lsve cd bunu yapın:
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.
Bu silmek denemeden sonra oldu, ben cevaplar birinde söylediği gibi NFS sorunları olabileceğini düşünüyorum burada vinc17 tarafından.
6 DÜZENLEME: Bu çıkışı olan lsofvels -a
rl] $ / usr / sbin / lsof mikeaa ^ Á ^ Äcnt lsof: mikea'da durum hatası \ xc2 \ x81 \ xc2 \ x84cnt: Böyle bir dosya veya dizin yok
yukarıdaki yanlış, işte doğru lsofçağrı: (rl üst dizindir)
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 Düzenleme: hareket değil iş, (bütün bu daha önce denedim ama çıktı tasarruf etmedi), ancak aynı sorun lsve rm dosya ile.
8. EDIT: önerilen altıgen karakterleri kullanıyor:
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. Düzenleme: statkomut için:
rl]$ stat mikeaâ^Á^Äcnt
stat: cannot stat `mikeaâ\302\201\302\204cnt': No such file or directory
rl]$
Tüm çıktılardan daha da muhtemel görünüyor, yorumlarda önerildiği gibi bir hata veya başka bir NFS hatalı davranışı var.
Düzenleme 10: Bu çok büyük, çıktısı veya bu iki komuttan dolayı, büyük bir çıkarımdadır:
strace -xx rmdir ./* | grep -e '-1 E'`
strace -xx -e trace=file ls -li`
https://gist.github.com/mikeatm/e07fa600747a4285e460
Düzenleme 11: Öyleyse yukarıdakilerden önce dizine rmdirgirebildiğimi fark ettim cd, ancak ondan sonra tekrar dün rmdirolamayacağım cd. .Ve .. dosyalar mevcuttu:
rl]$ ls
mikeaâ??cnt
rl]$ cd mikeaâ^Á^Äcnt/
mikeaâ^Á^Äcnt]$ ls
mikeaâ^Á^Äcnt]$ ls -a
. ..
mikeaâ^Á^Äcnt]$ cd ../
Son Düzenleme: Bunun üzerinde yerel bir yönetici gördüm ve sunucuya giriş yaparak ve oradan silerek ilgilenildi. Onlardan açıklama, ismin karakter kümeleriyle uygunsuz olmasının bir sorun olabileceğidir.
mv. belki ondan sonra silebilirsin. Alternatif olarak, dizini daha derin bir klasör seviyesine taşımayı deneyebilirsiniz (belki bir joker karakter ile) ve sonra üzerine taşıdığınız klasörü silmeyi deneyebilirsiniz.
findSadeceexecseçeneğini kullanmak yerine, çıktısını farklı bir komuta aktarmanızın bir nedeni var mı ?