ง่ายตาย
ฉันจะเปลี่ยนชื่อได้อย่างไร
05_h.png
06_h.png
ถึง
05_half.png
06_half.png
อย่างน้อยฉันคิดว่ามันง่าย แต่ Google ก็ยากสำหรับเรื่องแบบนี้เว้นแต่คุณจะรู้อยู่แล้ว
ขอบคุณ ....
ง่ายตาย
ฉันจะเปลี่ยนชื่อได้อย่างไร
05_h.png
06_h.png
ถึง
05_half.png
06_half.png
อย่างน้อยฉันคิดว่ามันง่าย แต่ Google ก็ยากสำหรับเรื่องแบบนี้เว้นแต่คุณจะรู้อยู่แล้ว
ขอบคุณ ....
คำตอบ:
เพียงใช้ bash ไม่จำเป็นต้องโทรออกคำสั่งจากภายนอก
for file in *_h.png
do
mv "$file" "${file/_h.png/_half.png}"
done
อย่าเพิ่ม #!/bin/sh
สำหรับผู้ที่ต้องการซับในหนึ่งอัน:
for file in *.png; do mv "$file" "${file/_h.png/_half.png}"; done
Do not add #!/bin/sh
อะไรบ้าง? ฉันลองทั้งสองทำงานโดยมี / ไม่มีข้อความนี้
#!/bin/bash
ตั้งแต่สคริปต์ที่ใช้ทุบตีในตัวทดแทนสตริงคุณควรเพิ่มส่วนหัว สิ่งนี้กล่าวว่าโดยทั่วไปแล้ว bash จะเป็นเชลล์เริ่มต้นในคอมพิวเตอร์หลายเครื่องดังนั้นคุณจะไม่พบความแตกต่างมากมาย: D คุณสามารถค้นหาข้อมูลเพิ่มเติมได้ที่นี่
ลองrename
คำสั่ง:
rename 's/_h.png/_half.png/' *.png
ปรับปรุง:
ตัวอย่างการใช้งาน:
สร้างเนื้อหาบางส่วน
$ mkdir /tmp/foo
$ cd /tmp/foo
$ touch one_h.png two_h.png three_h.png
$ ls
one_h.png three_h.png two_h.png
วิธีทดสอบ:
$ rename 's/_h.png/_half.png/' *.png
$ ls
one_half.png three_half.png two_half.png
ls
? สิ่งที่เป็นrename ...
คุณลอง?
rename
ไม่ใช่เครื่องมือ Unix มาตรฐาน
brew install rename
's//'
- ฉันอ้างอิงคนและมีเรื่องย่อง่าย ๆ : rename [options] expression replacement file...
บน CentOS 7 รุ่น:rename from util-linux 2.23.2
.
ตรงกับอักขระใด ๆ ไม่ใช่แค่จุด - สำหรับจุดตัวอักษรใช้\.
แทน
for f in *.png; do
fnew=`echo $f | sed 's/_h.png/_half.png/'`
mv $f $fnew
done
mv $f $fnew
ด้วยecho $fnew
เป็นบรรทัดที่สองเพื่อให้แน่ใจว่าผลลัพธ์ดูมีเหตุผล
คุณกำลังมองหาวิธีทุบตีบริสุทธิ์หรือไม่? มีหลายวิธี แต่นี่เป็นวิธีหนึ่ง
for file in *_h.png ; do mv "$file" "${file%%_h.png}_half.png" ; done
สิ่งนี้จะถือว่าไฟล์เดียวในไดเรกทอรีปัจจุบันที่ลงท้ายด้วย_h.png
คือไฟล์ที่คุณต้องการเปลี่ยนชื่อ
โดยเฉพาะอย่างยิ่งมากขึ้น
for file in 0{5..6}_h.png ; do mv "$file" "${file/_h./_half.}" ; done
สมมติว่าทั้งสองตัวอย่างเป็นของคุณเท่านั้น ไฟล์
สำหรับกรณีทั่วไปในการเปลี่ยนชื่อไฟล์ได้ รับ การคุ้มครอง ก่อน
ใช้rename
ยูทิลิตี้ที่เขียนเป็นภาษา Perl อาจเป็นไปได้ว่าไม่สามารถใช้งานได้ตามค่าเริ่มต้นแม้ว่า ...
$ touch 0{5..6}_h.png
$ ls
05_h.png 06_h.png
$ rename 's/h/half/' *.png
$ ls
05_half.png 06_half.png
for i in *_h.png ; do
mv $i `echo "$i"|awk -F'.' '{print $1"alf."$2}'`
done
ฉันมีคำถามที่คล้ายกัน: ในคู่มืออธิบายการเปลี่ยนชื่อเป็น
rename [option] expression replacement file
ดังนั้นคุณสามารถใช้วิธีนี้ได้
rename _h _half *.png
ในรหัส: '_h' คือนิพจน์ที่คุณกำลังมองหา '_half' เป็นรูปแบบที่คุณต้องการแทนที่ด้วย '* .png' คือช่วงของไฟล์ที่คุณกำลังมองหาไฟล์เป้าหมายที่เป็นไปได้
หวังว่าสิ่งนี้จะช่วยค:
วิธีการอื่นสามารถด้วยตนเองโดยใช้ตัวเลือกการเปลี่ยนชื่อแบทช์
คลิกขวาที่ไฟล์ -> คำสั่งไฟล์ที่กำหนดเอง -> เปลี่ยนชื่อแบทช์และคุณสามารถแทนที่ h กับครึ่ง
สิ่งนี้จะทำงานกับ gui ที่ใช้ linux โดยใช้ WinSCP เป็นต้น
ใช้rename
ยูทิลิตี้:
rc@bvm3:/tmp/foo $ touch 05_h.png 06_h.png
rc@bvm3:/tmp/foo $ rename 's/_h/_half/' *
rc@bvm3:/tmp/foo $ ls -l
total 0
-rw-r--r-- 1 rc rc 0 2011-09-17 00:15 05_half.png
-rw-r--r-- 1 rc rc 0 2011-09-17 00:15 06_half.png
หนึ่งในสายการบิน:
for file in *.php ; do mv "$file" "_$file" ; done
แม้ว่าชุดคำตอบจะเสร็จสมบูรณ์ฉันต้องเพิ่มอีกชุดหนึ่งที่ขาดหายไป
for i in *_h.png;
do name=`echo "$i" | cut -d'_' -f1`
echo "Executing of name $name"
mv "$i" "${name}_half.png"
done