ฉันพยายามเปลี่ยนชื่อไฟล์เช่นนี้:
for file in *;
do
mv -i "$file" "$(echo "$file" | sed -e 's/[^A-Za-z0-9._-]/_/g')";
done
แต่คำสั่งแทนที่ช่องว่างทั้งหมดที่มีsed
_
ฉันจะแก้ไขsed
คำสั่งเพื่อทำให้เป็นช่องว่างพร้อมกับอักขระที่ระบุได้อย่างไร ฉันลองใช้\s
แล้วแต่ไม่ได้ผล ...
แก้ไข:
ตัวอย่างเช่นไฟล์trip: hill
, ควรจะเปลี่ยนชื่อ: แต่คำสั่งดังกล่าวทำให้มันtrip_ hill
trip__hill
ฉันกำลังย้ายไฟล์บางไฟล์จาก linux ไปยัง Mac แต่ด้วยเหตุผลบางอย่างระบบ Mac ไม่สามารถอ่านชื่อไฟล์ทั้งหมดได้ดังนั้นฉันจึงพยายามเปลี่ยนชื่อไฟล์ การเพิ่มช่องว่างในคำสั่งด้านบนไม่ทำงาน และคุณถูกต้อง: ฉันต้องการแทนที่ตัวอักษรทั้งหมดด้วย '_' ยกเว้นที่ระบุไว้ และฉันไม่ทราบวิธีรวมอักขระที่ว่าง