Cách nhập một số tên tệp với ít nét chính


16

Nếu tôi muốn chuyển đổi pdfmột pnghình ảnh với hình ảnh tưởng tượng, tôi làm một cái gì đó như:

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

Tệp pdf thường có tên tệp rất dài vì một số lý do và tôi muốn rằng pngtệp có cùng tên ngoại trừ phần mở rộng.

Thông thường tôi chọn this_is_a_very_long_filename_of_my_pdf_file.pdfhai lần qua tab và zsh-menusau đó thay đổi pdfthành pngthủ công cho đối số thứ hai.

Tuy nhiên, có cách nào nhanh hơn để làm điều này?

Câu trả lời:


23

Bạn có thể sử dụng mở rộng cú đúp :

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

1
Cũng có thể lưu ý tự động hoàn thành tên tệp (nó có trong zsh, phải không?)
Ruslan

@Ruslan OP cho biết anh sử dụng tự động hoàn thành. Nhưng vẫn còn, điểm tiết kiệm thời gian tốt đẹp.
Cammy_the_block

5

Cuộc gọi đến mogrify này sẽ tạo một tệp png mới thay vì ghi đè lên pdf - hy vọng;)

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

đối với * .pdf sử dụng số lượng ký tự phù hợp để chọn đúng tệp hoặc hoàn thành tab tốt hơn cho đến khi bạn có tên đầy đủ.

Bằng cách này, bạn có thể tạo bí danh cho toàn bộ lệnh cho đến tham số png.


5

Nếu bạn luôn sử dụng cùng một lệnh với các biến thể nhỏ (chẳng hạn như tên tệp), bạn có thể viết một hàm:

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

(chức năng này dành riêng cho zsh) và đối với mỗi tệp your_file.pdf bạn muốn chuyển đổi:

pdf2png your_file.pdf

Lưu ý 1: Bạn có thể viết cùng loại hàm cho các shell khác, nhưng điều này phức tạp hơn một chút.

Lưu ý 2: Với zsh, các trích dẫn chỉ hữu ích nếu SH_WORD_SPLITtùy chọn được đặt (không phải là mặc định).


4

Xem xét sử dụng các biến để lưu trữ tên tệp của bạn. Họ cũng tự động hoàn thành:

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

Tôi sử dụng dấu ngoặc kép vì đôi khi không gian cắn.

Lợi ích đáng kể của việc này là:

  1. Bạn có thể thực hiện các hoạt động tiếp theo với giá trị bằng $ f, biết rằng nó trỏ đến đúng tệp
  2. Đây là bước nhảy ngắn nhất để gắn kết điều này trong cat listOfFiles | while read f; do ... ; donecấu trúc vòng lặp.
  3. Thông thường tên tệp được tạo tự động rất giống nhau và tự động hoàn thành sẽ rất khó chịu nếu bạn phải làm, abc<tab>d<tab>x<tab>2<tab>v.v ... Cách này, bạn chỉ phải nhập một lần và thậm chí bạn có thể chọn tệp mới nhất hoặc tệp lớn nhất thông qua một kịch bản như f=\ls -t | đầu -1``, thay vì đầu tiên chạy tìm kiếm, tìm tên tệp và phiên mã nó giống như một loại khỉ đã được huấn luyện.

2

Bạn cũng có thể sử dụng Mở rộng Lịch sử để chỉ các từ trên dòng lệnh hiện tại:

convert -trim -density 400 this_is_a_very_long_filename_of_my_pdf_file.pdf !#:$:r.png
  • Trình chỉ định sự kiện !# đề cập đến dòng lệnh được gõ cho đến nay
  • Trình chỉ định từ chỉ $ từ cuối cùng (trước khi mở rộng)
  • Công cụ sửa đổi r loại bỏ phần mở rộng tập tin. Điều này cũng đánh dấu sự kết thúc của văn bản, được thay thế khi mở rộng lịch sử xảy ra.
  • .pnglà phần mở rộng mới. Điều này không thuộc về bản mở rộng.

Khi dòng này được chạy, !#:$:rđược thay thế bằng tên của tệp pdf của bạn trừ phần mở rộng, do đó tạo lệnh từ câu hỏi:

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

Dòng này sau đó được thực hiện trực tiếp.

Nếu bạn muốn kiểm tra lệnh sau khi mở rộng lịch sử, trước khi thực hiện, hãy sử dụng

setopt histverify

Điều này sẽ tải lại dòng mở rộng vào bộ đệm chỉnh sửa thay vì thực thi nó.

Lưu ý: Không giống như bất kỳ sự mở rộng nào khác, việc mở rộng lịch sử được thực hiện trước khi lệnh được lưu vào lịch sử. Vì vậy, echo !#sẽ xuất hiện như echo echovà không như echo !#trong của bạn $HISTFILE.


2

Sử dụng mở rộng nẹp không thể được đánh bại cho ví dụ đặc biệt này. Tuy nhiên, linh hoạt hơn một chút là tiện ích zle copy-prev-shell-word, thực hiện đúng như tên gọi của nó và tiện dụng nếu bạn muốn một đối số tương tự như trước đây, không thể bắt nguồn một cách có hệ thống từ nó.

Ràng buộc các widget, ví dụ như CTRL+W:

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

Nếu bạn lười như tôi, hãy sử dụng chuỗi bindkey này

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

để có được hành vi sau:

  • CTRL+Wchèn từ shell trước đó vào chỗ trống hàng đầu (do đó, bạn lưu một tổ hợp phím!)
  • CTRL+W CTRL+W chèn từ vỏ trước trực tiếp
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.