การเปลี่ยนชื่อภาพตามลำดับเฉพาะ


8

นี่คือปัญหาของฉัน: ฉันมีโฟลเดอร์ที่มี 500 ภาพชื่อ:

1.jpg
2.jpg
3.jpg

และอื่น ๆ ..

ฉันคัดลอกโฟลเดอร์นั้นและตอนนี้ฉันต้องการเปลี่ยนชื่อรูปภาพเดียวกันจาก 501 เป็น 1,000 แต่ตามลำดับดังนี้:

1.jpg  becomes    501.jpg
2.jpg  becomes    502.jpg
3.jpg  becomes    503.jpg          
....

เมื่อฉันใช้คำสั่งเปลี่ยนชื่อมาตรฐานของฉัน:

i=501;for img in $(find . -iname '*.jpg'); do echo -n "Converting $img"; mv $img $i.jpg  && echo $i && ((i++)); done

มันสั่งรูปภาพตั้งแต่ 501 ถึง 1,000 แต่กระจัดกระจาย:

23.jpg becomes 501.jpg,    
66.jpg becomes 502.jpg 
...   

(พวกเขาอยู่ในลำดับที่ถูกต้อง แต่มันผสมกัน)

ฉันรู้ว่ามันอาจเป็นคำสั่งเดียวที่ฉันหายไป ...


ใช้ 2 ตัวแปร i และ j mv $ i.jpg $ j.jpg และเพิ่มตัวแปรของคุณ
Panther

ขอบคุณหวังว่าคุณจะเข้าใจ ฉันค้นหา แต่ไม่พบคำตอบ ..
Painkiller

แค่สงสัยชื่อดั้งเดิมพวกมันอยู่ในช่วงไหน? หมายเลขเดิมควรเปลี่ยนเป็น + 500 หรือไม่
Jacob Vlijm

ใช่ยาโคบคุณ +500 ฉันพยายามจะเขียนสิ่งที่ bodhi บอกฉัน แต่ฉันไม่ค่อยเก่งใน lnux ฉันฆ่าตัวเองเพื่อเขียนคำสั่งเปลี่ยนชื่อด้านบน: D
Painkiller

แล็ปท็อปที่ไม่ดีของฉันถูกครอบครองอย่างหนัก แต่ถ้าไม่มีคำตอบที่น่าพอใจ (ซึ่งฉันสงสัย :)) และถ้าคุณไม่จัดการฉันจะโพสต์สคริปต์ไพ ธ อนเล็ก ๆ คืนนี้
Jacob Vlijm

คำตอบ:


7

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

sudo apt-get install thunar

คุณอาจจะสามารถติดตั้งซอฟต์แวร์ Ubuntu ได้เช่นกัน

วิธีใช้ยูทิลิตี้

  1. เมื่อคุณติดตั้ง Thunar แล้วให้เปิดอรรถประโยชน์การเปลี่ยนชื่อเป็นกลุ่ม
  2. คลิกที่ไอคอน+และเพิ่มไฟล์ที่คุณต้องการเปลี่ยนชื่อในลำดับที่ถูกต้อง
  3. คลิกที่กล่องแบบหล่นลงด้านล่างรายชื่อของไฟล์ที่เลือกและเลือกหมายเลข คลิกที่ช่องถัดไปและเลือกชื่อเท่านั้น
  4. ในช่อง " เริ่มต้นด้วย: " ให้ป้อน 501 ให้ปล่อยช่อง " ข้อความ: " ว่างไว้ คุณควรเห็นตัวอย่างของการเปลี่ยนแปลงในคอลัมน์ชื่อใหม่
  5. หากต้องการใช้การเปลี่ยนแปลงให้คลิกที่ปุ่มเปลี่ยนชื่อไฟล์

นอกจากนี้การกำหนดหมายเลขให้ยูทิลิตี้นี้สนับสนุนการดำเนินการต่อไปนี้:

  • แทรกวันที่ / เวลา
  • แทรก / เขียนทับ
  • ลบตัวละคร
  • ค้นหาและแทนที่
  • ตัวพิมพ์ใหญ่ตัวพิมพ์เล็ก

ขอบคุณคนที่คุณเป็น MVP! ฉันเพียงแค่เพิ่มว่าฉันยังต้องเปลี่ยนรูปแบบข้อความเป็น: ข้อความ - หมายเลข (ในกรณีที่คนอื่นใช้สิ่งนี้)
Painkiller

2
หากต้องการเปลี่ยน fm เป็น ... ดำเนินการอย่างง่าย ๆ การเขียนส่วนขยายสคริปต์หอยโข่งอย่างง่ายใช้เวลาน้อยลงแล้วสลับ fm
Jacob Vlijm

1
@JacobVlijm ฉันใช้ Thunar เพียงเพื่อเปลี่ยนชื่อเครื่องมือจำนวนมากพร้อมกับ Nautilus Thunar ค่อนข้างเบาและดูเหมือนจะไม่ทำให้เกิดความขัดแย้งกับ Nautilus หรือโปรแกรมจัดการไฟล์อื่น ๆ
pomsky

4
หากคุณไม่ต้องการให้ตัวจัดการไฟล์ตัวที่สองpyrenamerทำงานได้อย่างสมบูรณ์และเป็นสิ่งที่ฉันใช้สำหรับการเปลี่ยนชื่อสองชั้นเมื่อฉันต้องการให้ GUI เปรียบเทียบก่อน / หลังเอาต์พุต
Tom Brossman

13

findคำสั่งพบไฟล์ในการสั่งซื้อ 'ไดเรกทอรี' ( 23.jpg, 66.jpg, ... ) คุณสามารถใส่|sortหลังจากการค้นหา

แต่วิธีการของคุณค่อนข้างซับซ้อน

for i in $( seq 1 500 ) ; do
    j=$(( $i + 500 ))
    mv $i.jpg $j.jpg
done 

3
for i in {1..500}; do ...จะมีผึ้งง่ายขึ้น
David Foerster

11

ด้วยrenameคำสั่ง

rename -n 's/^(\d+)/sprintf("%d",$1+500)/e' *.jpg

หรือในที่บริสุทธิ์bashและการใช้การขยายตัวพารามิเตอร์เปลือก

for FILE in *.jpg; do
    mv "$FILE" "$(( ${FILE%.jpg}+500 )).jpg" 
done 

5

หากฉันเข้าใจสิ่งที่คุณถามอย่างถูกต้องฉันคิดว่าคุณสามารถทำได้โดยใช้เครื่องมือเปลี่ยนชื่อเริ่มต้น:

rename 's/^(\d+)/sprintf("%d",$1+500)/e' *.jpg -vn

คุณควรลบ-vnสวิตช์ (verbose - ไม่มีการกระทำ) หลังจากการทดสอบเพื่อให้การเปลี่ยนแปลงมีประสิทธิภาพ


จะติดตั้งเครื่องมือนี้ใน Ubuntu ได้อย่างไร? โดยค่าเริ่มต้นrenameจะเชื่อมโยงprename(1)จากperlแพ็คเกจซึ่งไม่รองรับตัวเลือกบรรทัดคำสั่งเหล่านี้ทั้งหมด
David Foerster

@DavidFoerster คุณอาจพูดถูก ฉันหาลิงค์การติดตั้งปัจจุบันไม่พบ (ฉันไม่ได้ใช้มันตั้งแต่ประมาณปี 2014) ด้วยเครื่องมือการเปลี่ยนชื่อเริ่มต้นผมคิดว่าการแสดงออก regex 's/^(\d+)/sprintf("%d",$1+500)/e'ที่ควรจะเป็น ฉันจะอัปเดตคำตอบของฉันตาม ขอบคุณ
sempaiscuba

1
คำตอบของคุณคือตอนนี้ซ้ำAfshin ของ
David Foerster

@DavidFoerster ขออภัยคำตอบคืออะไร อีกคำตอบเดียวที่ฉันเห็นคือ pomsky & waltinator ไม่ใช้การเปลี่ยนชื่อ (ทั้งสองเวอร์ชัน)
sempaiscuba

ลิงก์โดยตรงไปยังคำตอบที่ฉันหมายถึงรวมอยู่ในความคิดเห็นก่อนหน้าของฉัน
David Foerster

0

อีกวิธีในการบรรลุเป้าหมายนี้ด้วยคำสั่งเชลล์

count = 1; สำหรับ i ในls; ทำ mv $ i CN $ (นับ ++)) $ {i ## *.}; เสร็จแล้ว

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