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 ls
gösterileri bash ile ve ben olsun piton ile hem 's hediye, benzer davranış, onu silmeye çalıştıktan hemen sonra rm -rf
, ls
bulamadığından şikayet eder, sonra listeler (sonradan aşağıya bakın rm -rf
). find
Komut 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 ls
ve bir find
rehberimiz 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
cd
Yine 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ığı ls
söylendikten sonra komik davranır , rm -rf
sonra 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 find
kendi -exec
seç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, ( ls
bulamı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\x84cnt
ve 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 ls
ve 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 lsof
vels -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 ls
ve 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: stat
komut 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 rmdir
girebildiğimi fark ettim cd
, ancak ondan sonra tekrar dün rmdir
olamayacağı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.
find
Sadeceexec
seçeneğini kullanmak yerine, çıktısını farklı bir komuta aktarmanızın bir nedeni var mı ?