ลบคำนำหน้าจากชื่อไฟล์


10

ฉันมีไฟล์มากมายดังนี้:

04602635_b0294.DAT20120807164534
04602637_b0297.DAT20120807164713
04602638_b0296.DAT20120807164637
04602639_b0299.DAT20120807164819
04602640_b0298.DAT20120807164748
04602641_b0300.DAT20120807164849
04602650_b0301.DAT20120807164921
04602652_b0302.DAT20120807164956

ฉันต้องเปลี่ยนชื่อพวกเขาเพื่อไม่รวมคำนำหน้า มันต้องมีหน้าตาแบบนี้ ..

b0294.DAT20120807164534
b0297.DAT20120807164713
b0296.DAT20120807164637
b0299.DAT20120807164819
b0298.DAT20120807164748
b0300.DAT20120807164849
b0301.DAT20120807164921
b0302.DAT20120807164956

แก้ไข

ฉันลืมที่จะเพิ่มว่าฉันใช้โซลาริส

คำตอบ:


19
for file in * ; do
    echo mv -v "$file" "${file#*_}"
done

เรียกใช้สิ่งนี้เพื่อตอบสนองว่าทุกอย่างโอเค
หากเป็นเช่นนั้นให้ลบechoจากคำสั่งและจะเปลี่ยนชื่อไฟล์ตามที่คุณต้องการ

"${file#*_}"

เป็นคุณสมบัติทดแทนปกติในเปลือก มันจะลบตัวอักษรทั้งหมดก่อนที่_สัญลักษณ์แรก(รวมถึงสัญลักษณ์เอง) สำหรับรายละเอียดเพิ่มเติมดูที่นี่


คุณช่วยอธิบายสิ่งที่เกิดขึ้นได้"${file#*_}"มั้ย
Pieter van Niekerk

ฉันเพิ่มคำอธิบายลงในคำตอบของฉัน
เร่ง

IMO สคริปต์ส่วนใหญ่ควรเขียนเพื่อสะท้อนเอาต์พุตคำสั่งที่ต้องการ แต่อย่าเอาเพียงท่อส่งออกสคริปต์ลงecho bash
Jim L.

7

คุณสามารถใช้เครื่องมือrenameนี้:

rename "s/.*_//" *

หากคุณผนวกมันจะไม่เปลี่ยนชื่ออะไรและเพียงแค่แสดงให้คุณเห็นสิ่งที่จะได้รับการดำเนินการได้โดยไม่ต้อง-n-n

ในการตอบสนองต่อความคิดเห็นของรัช: renameจริง ๆ แล้วฉันเป็นลิงก์ไปยังพัสดุprenameของ Debian และ Ubuntuperl


5
โปรดทราบว่าrenameอาจไม่เหมือนกันในระบบที่แตกต่างกันและบางครั้งไวยากรณ์อาจแตกต่างกัน
เร่ง

1
ผู้ถามได้เสริมว่าเขาใช้โซลาริส ดังนั้นคำสั่งเปลี่ยนชื่อนี้ (ซึ่งเฉพาะ Debian และอนุพันธ์) จึงไม่สามารถใช้ได้
Gilles 'หยุดความชั่วร้าย'

1
... เว้นแต่เขาจะสร้างมันจากแหล่งที่มา
sendmoreinfo

@Gilles perl-renameไม่เฉพาะเดเบียนเท่านั้น มันไม่ได้เรียกว่าrenameแต่perl-renameหรือprenameในการกระจายอื่น ๆ มันควรจะอยู่ใน repos เสมอและมีการติดตั้ง perl ด้วยเช่นกัน
terdon

@terdon คำสั่งเปลี่ยนชื่อไฟล์ที่มีการใช้งานพื้นฐานคือการแสดงออกของ perlไม่เฉพาะ Debian คำสั่งดังกล่าวเรียกใช้renameและมีแนวโน้มที่จะติดตั้งโดยไม่ต้องร้องขอแพคเกจที่ไม่ได้เรียกว่า just แต่renameเฉพาะเจาะจงกับ Debian ลินุกซ์อื่น ๆ เรียกคำสั่งprenameหรือperl-renameให้เกิดความสับสนหลีกเลี่ยงกับ util ลินุกซ์renameและไม่กำมันกับแพคเกจ Perl และฉันไม่ได้ตระหนักถึงการใด ๆ ที่ไม่ใช่ลินุกซ์ยูนิกซ์ที่เรือมันภายใต้ชื่อrenameหรือเรือว่ามันใน การติดตั้งเริ่มต้นภายใต้ชื่อใด ๆ
Gilles 'หยุดความชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.