สิ่งสำคัญคือต้องเข้าใจว่านี่ไม่ใช่ "ความเสียหายของระบบไฟล์" ที่fsck
จะช่วยได้ ตราบใดที่ระบบไฟล์มีความเกี่ยวข้องชื่อไฟล์สามารถเป็นลำดับใด ๆ ของไบต์ตราบใดที่ไม่มีไบต์เดียวมีค่า 0x00 (ASCII NUL, C-end-of-string marker) หรือ 0x2F ( /
ตัวคั่นไดเรกทอรี) (หากชื่อไฟล์มีขนาด 00 หรือ 2F ฝังอยู่ภายในfsck
ควรแก้ไขด้วย)
แต่สิ่งที่คุณมีคือชื่อไฟล์ที่แอพพลิเคชั่นซอฟต์แวร์ (ดอลฟินls
) คิดว่ามีตัวอักษรที่ไม่สามารถแสดงได้ใน "โลแคล" ของคุณดังนั้นจึงแทนที่ด้วยอักขระตัวแทน คุณไม่สามารถพิมพ์อักขระเหล่านั้นได้ดังนั้นการจัดการไฟล์จึงทำได้ยากขึ้น แต่คุณสามารถทำได้ตราบใดที่คุณทำได้โดยไม่ต้องพิมพ์หรือคัดลอกและวางชื่อ ตัวอย่างเช่นหากคุณลบหรือเปลี่ยนชื่อไฟล์ปัญหาโดยตรงจากภายใน Dolphin สิ่งนั้นก็ควรจะใช้งานได้ (ฉันจะบอกว่าถ้ามันใช้งานไม่ได้นั่นเป็นข้อผิดพลาดของ Dolphin)
หากคุณต้องการทำอะไรบางอย่างเกี่ยวกับพวกเขาจากเชลล์ (ตัวอย่างเช่นหากพวกเขาเป็นเจ้าของroot
และดังนั้นจึงไม่สามารถแก้ไขได้โดยโปรแกรม GUI) คุณสามารถตั้งชื่อพวกมันโดยอ้อมโดยใช้รูปแบบ "glob" ซึ่งจะขยายไปยังลำดับที่ถูกต้อง (s) ของไบต์และผ่านไป
แน่นอนว่าคุณไม่ต้องการลบข้อมูลโดยไม่ตั้งใจเพราะรูปแบบกลมของคุณตรงกันมากเกินไปดังนั้นคำแนะนำของฉันคือการใช้rename
โปรแกรมอรรถประโยชน์Perl เพื่อแปลงชื่อไฟล์แต่ละไฟล์ให้เป็นการเข้ารหัส hex:
$ rename '$_ = unpack("H*", $_)' *
สิ่งนี้จะไม่ทำลายข้อมูลใด ๆ - ทั้งไฟล์เองและความหมายใด ๆ ที่อาจถูกเข้ารหัสไว้ในชื่อไฟล์ก่อนที่จะถูกทำให้ยุ่งเหยิง มันสามารถยกเลิกได้สำหรับไฟล์เฉพาะด้วยเช่น
$ rename '$_ = pack("H*", $_)' 696d706f7274616e742e646f63
ข้อควรระวัง: มีสองโปรแกรมชื่อrename
จากต้นกำเนิดที่แตกต่างกัน คำสั่งดังกล่าวจะทำงานเฉพาะกับคนที่มากับ Perl ใน Ubuntu สิ่งที่คุณต้องการคือสิ่งที่มาจากแพ็คเกจ "เปลี่ยนชื่อ" ไม่ใช่จากแพ็คเกจ "util-linux" rename -h
จะแยกแยะ: นี่คือสิ่งที่คุณต้องการ ...
$ rename -h
Usage:
rename [ -h|-m|-V ] [ -v ] [ -n ] [ -f ] [ -e|-E perlexpr]*|perlexpr
[ files ]
# ...
... นี่ไม่ใช่สิ่งที่คุณต้องการ ...
$ rename -h
Usage:
rename [options] <expression> <replacement> <file>...
# ...
สิ่งสำคัญในการค้นหาคือ "perlexpr" คุณอาจมีการเปลี่ยนชื่อ Perl รุ่นเก่าที่ไม่เข้าใจตัวเลือกทั้งหมดข้างต้น แต่คำสั่งที่ฉันแสดงควรยังคงใช้งานได้
แก้ไข: ภายใต้ 14.04 .5 สคริปต์ perl ที่รวมไว้rename
ไม่รองรับสวิตช์ -h คุณสามารถยืนยันได้ว่าคุณมีสิ่งที่ถูกต้องโดยการตรวจสอบมันเป็นหน้าคนที่มีman rename
ในกรณีที่บรรทัดบนจะมี:
RENAME (1) คู่มืออ้างอิงโปรแกรมเมอร์ Perl RENAME (1)