ฉันยกเลิกการติดตั้งไฟล์ tar ที่เสียหายและจัดการเพื่อจบลงด้วยไดเรกทอรีบางอย่างที่ฉันไม่สามารถลบได้ถ้าฉันพยายามลบมันดูเหมือนว่าหาไม่พบ แต่ls
แสดงว่ามันมีอยู่ทั้งทุบตีและหลามด้วย ลักษณะการทำงานที่คล้ายกันยกเว้นขวาหลังจากที่ฉันพยายามที่จะลบมันด้วย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
มีอะไรที่ฉันสามารถทำได้เพื่อกำจัด dir ที่เสียหายนี้หรือไม่? ระบบไฟล์พื้นฐาน (NFS) ดูเหมือนว่าทำงานได้และไม่มีรายงานปัญหาอื่น ๆ และฉันไม่มีปัญหาดังกล่าวจนกว่าไฟล์ tar เสียหาย
แก้ไข: นี่คือการใช้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
และภาพหน้าจอนี้:
แก้ไขครั้งที่ 4: นี่คือความพยายามด้วย wild card:
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 เป็นข้อเสนอแนะในหนึ่งในคำตอบที่นี่โดย vinc17
แก้ไขที่ 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
กับไฟล์
8th แก้ไข: นี่คือการใช้ตัวอักษรฐานสิบหกตามที่แนะนำ:
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]$
9th แก้ไข: สำหรับstat
คำสั่ง:
rl]$ stat mikeaâ^Á^Äcnt
stat: cannot stat `mikeaâ\302\201\302\204cnt': No such file or directory
rl]$
ดูเหมือนว่ามันจะเป็นไปได้มากขึ้นจากการส่งออกทั้งหมดมีข้อผิดพลาดหรือพฤติกรรมที่ไม่เหมาะสม NFS อื่น ๆ ตามที่แนะนำในการแสดงความคิดเห็น
แก้ไข 10: นี่คือ strace เอาต์พุตในส่วนสำคัญเนื่องจากมันมีขนาดใหญ่เอาต์พุตหรือคำสั่งทั้งสองนี้:
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
ลองเปลี่ยนชื่อไดเรกทอรีเพื่อบางสิ่งบางอย่างได้โดยไม่ต้องใช้สัญลักษณ์เหล่านั้น บางทีคุณสามารถลบได้หลังจากนั้น หรือคุณอาจลองย้ายไดเรกทอรีไปยังระดับโฟลเดอร์ที่ลึกกว่า (อาจเป็น wildcard) แล้วลบโฟลเดอร์ที่คุณย้ายไป
find
เอาท์พุทไปยังคำสั่งอื่นแทนที่จะใช้แค่exec
ตัวเลือกมันหรือไม่?