เปลี่ยนชื่อไฟล์ด้วยชื่อแปลก ๆ บนภูเขาแซมบ้า


10

ฉันต้องการเปลี่ยนชื่อไฟล์ด้วยชื่อแปลก ๆ เป็นสิ่งที่สมเหตุสมผล แต่ฉันไม่สามารถ: /

$ mv *_000c.jpg 000c.jpg
mv: cannot move '?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory

ฉันได้ลองใช้หมายเลขไอโหนดตามที่แนะนำในไม่กี่แห่งบนอินเทอร์เน็ต:

$ ls -il *000c.jpg
ls: '?j?Z?R?C1_000c.jpg': No such file or directory
213915 -rw-r--r-- 1 wolf wolf 794655 Jul 21  2012 '?j?Z?R?C1_000c.jpg'
$ find . -inum 213915 -print0 | xargs -0 -I '{}' mv '{}' 000c.jpg
mv: cannot move './?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory

ฉันควรทำอย่างไรดี?


1
ผลลัพธ์ของวิlsในไดเรคทอรีนั้นคืออะไร? ไฟล์แสดงเป็นไฟล์ปกติหรือไม่? ฉันขอให้ตรวจสอบให้แน่ใจว่าNo such file or directoryเป็นข้อผิดพลาดแบบวงกลมและไม่บ่งบอกถึงระบบไฟล์ที่เสียหาย
terdon

1
ฉันสงสัยว่าระบบไฟล์จะต้องทำงานผ่านfsckหรือไม่ ฉันอาจจะเสียหาย ไฟล์ดังกล่าวได้ชื่อมาอย่างไร
Kusalananda

1
@Mioriin เครื่องหมายคำถามในชื่อไฟล์คือ (หรืออาจจะ) ตัวยึดสำหรับอักขระที่ไม่สามารถแสดงได้ (เหตุผลหนึ่งที่ไม่แยกวิเคราะห์ผลลัพธ์ls)
Kusalananda

1
นี่อาจเป็นปัญหาแบบอักษรของเทอร์มินัล มันแสดง?ตัวอักษรที่ไม่สามารถแสดงได้ ลองเปลี่ยนเป็นแบบอักษร unicode ทั้งหมด
Mio Rin

5
@Mioriin ไม่ว่าจะสามารถแสดงชื่อไฟล์ได้หรือไม่นั้นเป็นปลาเฮอริ่งแดงในกรณีนี้ฉันคิดว่า มีอะไรแปลก ๆ คือเชลล์สามารถขยายได้*_000c.jpgแต่mvไม่สามารถประมวลผลไฟล์ได้ นี่คือ IMHO หมายถึงระบบไฟล์ที่เสียหาย ... หรืออาจเป็นไปได้ว่าระบบไฟล์ที่ติดตั้งอยู่บนเครือข่ายที่ใช้ร่วมกันนั้นหายไป
Kusalananda

คำตอบ:


16

สรุปความคิดเห็นที่เกี่ยวข้อง:

ระบบไฟล์ Unix อนุญาตให้ใช้อักขระใด ๆ ในชื่อไฟล์นอกเหนือจาก\0(nul) และ/(forward slash) ความจริงที่lsแสดงเครื่องหมายคำถามเป็นเพียงเพราะไม่สามารถแสดงอักขระบางตัวของชื่อไฟล์ในภาษาปัจจุบัน (ซึ่งเป็นหนึ่งในเหตุผลที่คุณควรหลีกเลี่ยงการแยกวิเคราะห์ผลลัพธ์ของls )

อย่างไรก็ตามด้วยการใช้ Samba ร่วมกันคุณมีข้อกำหนดที่เข้มงวดมากขึ้นเกี่ยวกับชื่อไฟล์มากกว่าในระบบไฟล์ Unix มาตรฐาน

เนื่องจากไฟล์มีชื่อที่ "ผิดกฎหมาย" ในการแชร์แซมบ้ากลางของคุณไฟล์จึงไม่สามารถเข้าถึงได้โดยชื่อที่ถูกต้องบนเครื่องที่ติดตั้งการแชร์

ใช้งานmvไม่ได้เนื่องจากชื่อที่ส่งคืนจากการแบ่งปัน Samba สำหรับการขยายรูปแบบการวนซ้ำนั้นไม่ใช่ชื่อจริงของไฟล์ในระบบไฟล์โฮสติ้งมีเพียงชื่อที่ใช้ในการจัดการกับชื่อของแซมบ้าเท่านั้น

ทางออกของคุณคือการเข้าสู่เซิร์ฟเวอร์ที่โฮสต์ไฟล์ (บนระบบไฟล์ที่มีกฎการตั้งชื่อที่ จำกัด น้อยกว่า Samba) และเปลี่ยนชื่อของไฟล์ที่นั่น นี่เป็นการกระทำที่ถูกต้อง

ดูการสนทนา Unix & Linux เกี่ยวกับคำถามนี้


-2

ก่อนที่ฉันจะเรียนรู้เกี่ยวกับการอ้างอิงในยูนิกซ์เชลล์ฉันจะใช้diredโหมดemacs เพื่อเปลี่ยนชื่อหรือลบไฟล์ที่จับคู่ยาก คุณเพียงเปิดไดเรกทอรีใน emacs:

emacs -q .

... Rแล้วคุณสามารถใช้ปุ่มลูกศรเพื่อนำทางไปยังไฟล์ที่คุณต้องการที่จะแก้ไขและเปลี่ยนชื่อไฟล์ด้วย ?จะให้รายการคำสั่งที่มีให้คุณ (คุณสามารถลบไฟล์ที่จับคู่ยากเกินไป)

จากนั้นคุณก็C-x C-cออกไปจาก emacs และทำเสร็จแล้ว


-3

บ่อยครั้งที่มีชื่อไฟล์ที่ผิดปกติคุณสามารถเพิ่ม "./" ก่อนที่ชื่อไฟล์และ Linux จะจำได้อย่างถูกต้อง ตัวอย่างเช่น: $ ls ./?j?Z?R?C1_000c.jpg

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.