Я знімав пошкоджений файл 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
використовуючи ім'я, яке пітон показує з 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.
EDIT: Тут використовується 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
скаржиться, що не може його знайти, але потім все одно показує)
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
Поведінка залишається незмінною, файл все ще присутній
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
, і цей знімок екрана:
Четверте редагування: Це спроба за допомогою шаблону:
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.
Це сталося після спроб видалення, я думаю, що це можуть бути проблеми NFS, як запропоновано vinc в одному з відповідей тут .
6-е редагування: це вихід lsof
іls -a
rl] $ / usr / sbin / lsof mikeaâ ^ Á ^ Äcnt lsof: помилка стану в 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-е редагування: це використання шістнадцяткових символів, як запропоновано:
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: Це страйковий вихід у сукупності, оскільки його такий великий, вихідний чи дві ці команди:
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
варіант?