कम कुंजी स्ट्रोक के साथ कई फ़ाइल नाम कैसे लिखें


16

अगर मैं pdfएक 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

पीडीएफ फाइल में अक्सर कुछ कारणों से एक बहुत लंबी फ़ाइल का नाम होता है और मैं चाहता हूं कि 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 में मौजूद है, है न?)
रुस्लान

@ रुसलान ओपी ने कहा कि वह स्वत: पूर्ण का उपयोग करता है। लेकिन फिर भी, अच्छा समय बचत बिंदु।
Cammy_the_block

5

Mogrify के लिए यह कॉल पीडीएफ को अधिलेखित करने के बजाय एक नई पीएनजी फ़ाइल बनाएगी - उम्मीद है;)

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तो आपकी पीडीएफ फाइल का नाम एक्सटेंशन द्वारा बदल दिया जाता है, इस प्रकार प्रश्न से कमांड बनाई जाती है:

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 echoecho !#$HISTFILE


2

इस विशेष उदाहरण के लिए ब्रेस विस्तार का उपयोग नहीं किया जा सकता है। हालाँकि, थोड़ा अधिक लचीला 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पिछले शेल शब्द को एक प्रमुख रिक्त के साथ सम्मिलित करता है (इसलिए, आप एक कीस्ट्रोक बचाते हैं!)
  • CTRL+W CTRL+W पिछले शेल शब्द को सीधे सम्मिलित करता है
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.