Tôi đã gỡ bỏ một tệp tar bị hỏng và quản lý để kết thúc với một số thư mục mà tôi không thể xóa, Nếu tôi cố xóa nó, có vẻ như nó không thể được tìm thấy, nhưng ls
hiển thị nó, cả bash và python tôi nhận được hành vi tương tự, ngoại trừ ngay sau khi tôi cố gắng xóa nó rm -rf
, ls
phàn nàn rằng nó không thể tìm thấy nó, sau đó nó liệt kê nó (xem bên dưới sau rm -rf
). Các find
lệnh show file có mặt, nhưng tôi vẫn không thể nghĩ ra một cách để xóa nó.
Đây là những nỗ lực của tôi:
Ở đây bạn thấy cả hai ls
và find
đồng ý chúng tôi có một thư mục,
rl]$ ls
mikeaâ??cnt
rl]$ find -maxdepth 1 -type d -empty -print0
./mikeaâcnt
Nhưng tôi không thể xóa nó:
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
Tôi có thể cd
làm điều đó và nó trống rỗng:
rl]$ cd mikeaâ^Á^Äcnt/
mikeaâ^Á^Äcnt]$ ls
mikeaâ^Á^Äcnt]$ pwd
.../rl/mikeaâcnt
mikeaâ^Á^Äcnt]$ cd ../
rl]$ ls
mikeaâ??cnt
xem bên dưới không phải là một tệp đơn giản mà là một thư mục, cộng với ls
hành vi buồn cười sau khi rm -rf
nó nói rằng nó không thể tìm thấy tệp sau đó liệt kê nó ngay sau:
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]$
Vì vậy, đây là nỗ lực với python, tệp được tìm thấy, nhưng tên không thể sử dụng được như một tên có thể bị xóa:
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'
ngay cả khi tôi sử dụng tab hoàn thành, tên nó vẫn không thể sử dụng được:
rl]$ rm -rf mikeaâ^Á^Äcnt
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
sử dụng tên mà python hiển thị với bash tôi nhận được điều này:
rl]$ rm -rf "mikea\xc3\xa2\xc2\x81\xc2\x84cnt"
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
Có bất cứ điều gì tôi có thể làm để thoát khỏi thư mục tham nhũng này? Hệ thống tập tin cơ bản (NFS) có vẻ hoạt động và không có vấn đề nào khác được báo cáo, và tôi đã không gặp vấn đề nào như vậy cho đến khi tập tin tar bị hỏng.
EDIT: Ở đây đang sử dụng tùy chọn find
riêng -exec
để gọirm
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]$
nhưng tập tin vẫn ở đó, ( ls
phàn nàn rằng nó không thể tìm thấy nó, nhưng sau đó vẫn hiển thị nó)
EDIT thứ 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
Hành vi vẫn không thay đổi, tập tin vẫn hiện diện
EDIT thứ 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
Dường như có nhiều cái tên hơn là mikeaâcnt
nhìn vào đầu ra của nỗ lực trăn mikea\xc3\xa2\xc2\x81\xc2\x84cnt
và ảnh chụp màn hình này:
EDIT thứ 4: Đây là nỗ lực với một thẻ hoang dã:
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
và địa phương của tôi:
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=
Chỉnh sửa lần thứ 5:
rl]$ ls -i
ls: cannot access mikeaâcnt: No such file or directory
? mikeaâ??cnt
nhưng cũng thay đổi hành vi, bây giờ ls
và cd
làm điều này:
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.
Điều này đã xảy ra sau những nỗ lực xóa, tôi nghĩ rằng đó có thể là vấn đề NFS như được đề xuất trong một trong những câu trả lời ở đây bởi vinc17.
EDIT thứ 6: Đây là đầu ra của lsof
vàls -a
rl] $ / usr / sbin / lsof mikeaâ ^ Á ^ cnt lsof: lỗi trạng thái trên mikeaâ \ xc2 \ x81 \ xc2 \ x84cnt: Không có tệp hoặc thư mục như vậy
ở trên là sai, đây là cách lsof
gọi đúng : (rl là thư mục cha)
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
Chỉnh sửa lần thứ 7: di chuyển sẽ không hoạt động, (tôi đã thử trước tất cả điều này, nhưng tôi không lưu kết quả đầu ra), nhưng nó có cùng một vấn đề với ls
và rm
với tệp.
EDIT thứ 8: đây là sử dụng các ký tự hex như được đề xuất:
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]$
Chỉnh sửa thứ 9: cho stat
lệnh:
rl]$ stat mikeaâ^Á^Äcnt
stat: cannot stat `mikeaâ\302\201\302\204cnt': No such file or directory
rl]$
Dường như thậm chí nhiều khả năng từ tất cả các đầu ra, có một lỗi hoặc hành vi sai trái NFS khác như được đề xuất trong các ý kiến.
Chỉnh sửa 10: Đây là đầu ra strace trong một ý chính vì nó quá lớn, đầu ra của nó hoặc hai lệnh này:
strace -xx rmdir ./* | grep -e '-1 E'`
strace -xx -e trace=file ls -li`
https://gist.github.com/mikeatm/e07fa600747a4285e460
Chỉnh sửa 11: Vì vậy, trước khi ở trên rmdir
tôi nhận thấy rằng tôi có thể cd
vào thư mục, nhưng sau khi rmdir
tôi không thể cd
một lần nữa, tương tự như ngày hôm qua. Các tập tin .
và ..
đã có mặt:
rl]$ ls
mikeaâ??cnt
rl]$ cd mikeaâ^Á^Äcnt/
mikeaâ^Á^Äcnt]$ ls
mikeaâ^Á^Äcnt]$ ls -a
. ..
mikeaâ^Á^Äcnt]$ cd ../
Chỉnh sửa cuối cùng: Tôi thấy một quản trị viên địa phương về vấn đề này và nó đã được xử lý bằng cách đăng nhập vào chính máy chủ và xóa từ đó. Lời giải thích từ họ là nó có thể là một vấn đề với các bộ ký tự trong tên không phù hợp.
mv
. có lẽ bạn có thể xóa nó sau đó Ngoài ra, bạn có thể thử di chuyển thư mục đến cấp thư mục sâu hơn (có thể bằng ký tự đại diện) và sau đó xóa thư mục bạn đã chuyển đến.
find
đầu ra của bạn chuyển sang một lệnh khác thay vì chỉ sử dụngexec
tùy chọn đó?