Jika saya ingin mengonversi gambar pdf
menjadi png
gambar dengan imagemagick, saya melakukan sesuatu seperti:
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
File pdf sering memiliki nama file yang sangat panjang karena beberapa alasan dan saya ingin png
file tersebut memiliki nama yang sama kecuali ekstensi.
Biasanya saya pilih this_is_a_very_long_filename_of_my_pdf_file.pdf
dua kali melalui tab dan zsh-menu
dan mengubah kemudian pdf
ke png
manual untuk argumen kedua.
Namun adakah cara yang lebih cepat untuk melakukan ini?
command-line
zsh
imagemagick
siswa
sumber
sumber
Panggilan untuk mogrify ini akan membuat file png baru alih-alih menimpa pdf - semoga;)
untuk th * .pdf gunakan jumlah karakter yang tepat untuk memilih file yang tepat atau penyelesaian tab yang lebih baik sampai Anda memiliki nama lengkap.
Dengan cara ini Anda dapat membuat alias ke seluruh perintah hingga ke parameter png.
sumber
Jika Anda selalu menggunakan perintah yang sama dengan variasi kecil (seperti nama file), Anda dapat menulis fungsi:
(fungsi ini khusus untuk
zsh
), dan untuk setiap file your_file.pdf Anda ingin mengkonversi:Catatan 1: Anda dapat menulis fungsi yang sama untuk shell lain, tetapi ini sedikit lebih rumit.
Catatan 2: Dengan
zsh
, tanda kutip hanya berguna jikaSH_WORD_SPLIT
opsi disetel (yang bukan default).sumber
Pertimbangkan menggunakan variabel untuk menyimpan nama file Anda. Mereka juga dilengkapi secara otomatis:
Saya menggunakan tanda kutip karena terkadang spasi menggigit.
Manfaat signifikan dari ini adalah:
cat listOfFiles | while read f; do ... ; done
struktur loop.abc<tab>d<tab>x<tab>2<tab>
dll. Dengan cara ini, Anda hanya perlu mengetiknya sekali, dan Anda bahkan dapat mengambil file terbaru atau file terbesar melalui skrip sepertif=\
ls -t | head -1``, alih-alih menjalankan pencarian terlebih dahulu, mencari nama file dan menyalinnya seperti semacam monyet terlatih.sumber
Anda juga dapat menggunakan Riwayat Ekspansi untuk merujuk kata-kata di baris perintah saat ini:
!#
mengacu pada baris perintah yang diketik sejauh ini$
menunjukkan kata terakhir (sebelum ekspansi)r
menghapus ekstensi file. Ini juga menandai akhir teks, yang diganti ketika ekspansi sejarah terjadi..png
adalah ekstensi baru. Ini bukan milik ekspansi itu sendiri.Ketika baris ini dijalankan,
!#:$:r
diganti dengan nama file pdf Anda minus ekstensi, sehingga menciptakan perintah dari pertanyaan:Baris ini kemudian langsung dieksekusi.
Jika Anda ingin memeriksa perintah setelah ekspansi sejarah, sebelum eksekusi, gunakan
Ini akan memuat ulang baris yang diperluas ke buffer pengeditan alih-alih menjalankannya.
Catatan: Tidak seperti ekspansi lainnya, ekspansi riwayat dilakukan sebelum perintah disimpan ke riwayat. Jadi
echo !#
akan munculecho echo
dan tidak sepertiecho !#
di Anda$HISTFILE
.sumber
Menggunakan ekspansi brace tidak dapat dikalahkan untuk contoh khusus ini. Namun, yang sedikit lebih fleksibel adalah widget zle
copy-prev-shell-word
, yang melakukan apa yang disarankan namanya dan berguna jika Anda ingin argumen yang sama seperti sebelumnya, yang tidak dapat secara sistematis diturunkan darinya.Bind widget misalnya ke
CTRL+W
:Jika Anda malas seperti saya, gunakan urutan bindkey ini
untuk mendapatkan perilaku berikut:
CTRL+W
menyisipkan kata shell sebelumnya dengan a blanko terkemuka (karenanya, Anda menyimpan satu penekanan tombol!)CTRL+W CTRL+W
menyisipkan kata shell sebelumnya secara langsungsumber