少ないキーストロークで複数のファイル名を入力する方法


16

imagemagickを使用pdfしてaをpng画像に変換する場合、次のようにします。

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、タブで2回選択し、2番目の引数を手動でzsh-menu変更します。pdfpng

しかし、これを行うためのより速い方法はありますか?

回答:


23

ブレース展開を使用できます:

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

1
ファイル名のオートコンプリートにも注意できます(zshにありますよね?)
Ruslan 14

@Ruslan OPは、オートコンプリートを使用すると述べました。しかし、それでも、時間を節約できるのはいいことです。
Cammy_the_block 14

5

このmogrifyの呼び出しは、pdfを上書きする代わりに新しいpngファイルを作成します-うまくいけば;)

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のようなスクリプトを介して| 最初に検索を実行し、ファイル名を探して何らかの訓練された猿のように文字起こしする代わりに、head -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ウィジェットはもう少し柔軟性があります。zleウィジェットはcopy-prev-shell-word、その名前が示すとおりに機能し、以前のものと同様の引数が必要な場合に便利です。

ウィジェットをCTRL+W次のようにバインドします。

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

あなたが私と同じくらい怠けているなら、このバインドキーシーケンスを使用してください

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

次の動作を取得するには:

  • CTRL+W前の空白を含む前のシェルワードを挿入します(したがって、キーストロークを1つ保存します!)
  • CTRL+W CTRL+W 前のシェルワードを直接挿入します
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.