วิธีพิมพ์ชื่อไฟล์ต่าง ๆ ด้วยการกดปุ่มน้อยลง


16

หากฉันต้องการแปลง a pdfเป็นpngภาพด้วย imagemagick ฉันทำสิ่งที่ชอบ:

convert -trim -density 400 this_is_a_very_long_filename_of_my_pdf_file.pdf this_is_a_very_long_filename_of_my_pdf_file.png

ไฟล์ pdf มักจะมีชื่อไฟล์ที่ยาวมากด้วยเหตุผลบางอย่างและฉันต้องการpngไฟล์ที่มีชื่อเดียวกันยกเว้นนามสกุล

ฉันมักจะเลือกthis_is_a_very_long_filename_of_my_pdf_file.pdfสองครั้งผ่านทางแท็บzsh-menuและเปลี่ยนแล้วpdfจะpngด้วยตนเองสำหรับอาร์กิวเมนต์ที่สอง

อย่างไรก็ตามมีวิธีที่เร็วกว่าในการทำเช่นนี้?

คำตอบ:


23

คุณสามารถใช้การขยายรั้ง :

convert -trim -density 400 this_is_a_very_long_filename_of_my_pdf_file.{pdf,png}

1
ยังสามารถบันทึกการเติมข้อความอัตโนมัติของชื่อไฟล์ (มีอยู่ใน zsh ไม่ใช่หรือไม่)
Ruslan

@Ruslan OP บอกว่าเขาใช้การเติมข้อความอัตโนมัติ แต่ถึงกระนั้นจุดประหยัดเวลาที่ดี
Cammy_the_block

5

การเรียกใช้ mogrify นี้จะสร้างไฟล์ png ใหม่แทนที่จะเขียนทับ pdf หวังว่า;)

mogrify -trim density 400 -format png th*.pdf

สำหรับ th * .pdf ใช้จำนวนอักขระที่เหมาะสมเพื่อเลือกไฟล์ที่เหมาะสมหรือการเติมแท็บให้สมบูรณ์จนกว่าคุณจะมีชื่อเต็ม

วิธีนี้คุณสามารถสร้างนามแฝงให้กับคำสั่งทั้งหมดจนถึงพารามิเตอร์ png


5

หากคุณใช้คำสั่งเดียวกันกับรูปแบบขนาดเล็กเสมอ (เช่นชื่อไฟล์) คุณสามารถเขียนฟังก์ชัน:

pdf2png() { convert -trim -density 400 "$1" "$1:r.png" }

(ฟังก์ชั่นนี้เฉพาะสำหรับzsh) และสำหรับแต่ละไฟล์ your_file.pdf คุณต้องการแปลง:

pdf2png your_file.pdf

หมายเหตุ 1: คุณสามารถเขียนฟังก์ชันชนิดเดียวกันสำหรับเชลล์อื่น ๆ ได้ แต่นี่ซับซ้อนกว่าเล็กน้อย

หมายเหตุ 2: ด้วยzshเครื่องหมายคำพูดมีประโยชน์เฉพาะเมื่อSH_WORD_SPLITมีการตั้งค่าตัวเลือก (ซึ่งไม่ใช่ค่าเริ่มต้น)


4

พิจารณาการใช้ตัวแปรเพื่อจัดเก็บชื่อไฟล์ของคุณ การเติมข้อความอัตโนมัติก็เช่นกัน:

f="this_is_a_very_long_filename_of_my_pdf_file"
convert -trim -density 400 "$f.pdf" "$f.png"

ฉันใช้คำพูดเพราะบางครั้งช่องว่างกัด

ประโยชน์ที่สำคัญของสิ่งนี้คือ:

  1. คุณสามารถดำเนินการต่อไปด้วยค่าใน $ f โดยที่รู้ว่าชี้ไปที่ไฟล์ที่ถูกต้อง
  2. มันเป็นการกระโดดที่สั้นที่สุดในการติดสิ่งนี้ในcat listOfFiles | while read f; do ... ; doneโครงสร้างลูป
  3. บ่อยครั้งที่ชื่อไฟล์ที่สร้างขึ้นโดยอัตโนมัติมีลักษณะคล้ายกันมากและการเติมข้อความอัตโนมัติจะสร้างความรำคาญให้คุณอย่างรวดเร็วหากคุณต้องทำabc<tab>d<tab>x<tab>2<tab>ฯลฯ ด้วยวิธีนี้คุณเพียงแค่พิมพ์ครั้งเดียวและคุณยังสามารถเลือกไฟล์ล่าสุดหรือไฟล์ที่ใหญ่ที่สุด ผ่านสคริปต์เช่นf=\ls -t | หัว -1`` แทนที่จะเรียกใช้การค้นหาเป็นครั้งแรกโดยมองหาชื่อไฟล์และถอดความเหมือนลิงที่ผ่านการฝึกมาแล้วบางประเภท

2

คุณยังสามารถใช้การขยายประวัติเพื่ออ้างอิงคำในบรรทัดคำสั่งปัจจุบัน:

convert -trim -density 400 this_is_a_very_long_filename_of_my_pdf_file.pdf !#:$:r.png
  • ตัวกำหนดเหตุการณ์ !#หมายถึงบรรทัดคำสั่งที่พิมพ์ไว้
  • ตัวออกแบบคำ $ระบุคำสุดท้าย (ก่อนการขยาย)
  • ตัวดัดแปลง rจะลบนามสกุลไฟล์ สิ่งนี้ยังทำเครื่องหมายจุดสิ้นสุดของข้อความซึ่งจะถูกแทนที่เมื่อมีการขยายประวัติ
  • .pngเป็นส่วนขยายใหม่ สิ่งนี้ไม่ได้เป็นของการขยายตัว

เมื่อเรียกใช้บรรทัดนี้!#:$:rจะถูกแทนที่ด้วยชื่อไฟล์ pdf ของคุณลบส่วนขยายดังนั้นการสร้างคำสั่งจากคำถาม:

convert -trim -density 400 this_is_a_very_long_filename_of_my_pdf_file.pdf this_is_a_very_long_filename_of_my_pdf_file.png

บรรทัดนี้จะดำเนินการโดยตรง

หากคุณต้องการตรวจสอบคำสั่งหลังจากการขยายประวัติก่อนดำเนินการให้ใช้

setopt histverify

สิ่งนี้จะโหลดบรรทัดที่ขยายเข้าไปในบัฟเฟอร์การแก้ไขแทนการเรียกใช้งาน

หมายเหตุ: ไม่เหมือนกับส่วนขยายอื่น ๆ การขยายประวัติจะดำเนินการก่อนที่คำสั่งจะถูกบันทึกลงในประวัติ ดังนั้นecho !#จะปรากฏเป็นecho echoและไม่เป็นในของคุณecho !#$HISTFILE


2

ไม่สามารถเอาชนะการใช้การขยายรั้งสำหรับตัวอย่างพิเศษนี้ อย่างไรก็ตามความยืดหยุ่นที่เพิ่มขึ้นเล็กน้อยคือวิดเจ็ต zle copy-prev-shell-wordซึ่งทำในสิ่งที่ชื่อแนะนำและมีประโยชน์ถ้าคุณต้องการอาร์กิวเมนต์ที่คล้ายกันเหมือนก่อนหน้าซึ่งไม่สามารถได้มาจากระบบ

ผูกวิดเจ็ตเช่นไปที่CTRL+W:

bindkey '^W' copy-prev-shell-word

หากคุณขี้เกียจเหมือนฉันใช้ลำดับ bindkey นี้

bindkey '^W^W' copy-prev-shell-word
bindkey -s '^W' ' ^W^W'

เพื่อรับพฤติกรรมดังต่อไปนี้:

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