एक फ़ाइल पथ की निर्देशिका पर जाएँ


0

क्या कोई तरीका है जो एक cdकमांड नियमित फ़ाइल पथ को स्वीकार कर सकता है और डीआईआर में कूद सकता है जहां फ़ाइल निवास करती है?

छवि आप कर सकते हैं: vim /usr/share/drupal7/sites/all/modules/legacy/legacy.module cd <alt>+<.> # for last command argument git add <alt>+<.>

बहुत अच्छा लगेगा

जवाबों:


1

यहां एक दृष्टिकोण है जो थोड़ा कम टाइपिंग है, लेकिन आपको इसके साथ थोड़ा सावधान रहने की आवश्यकता है। इसमें !$इतिहास का संदर्भ (जिसमें jcbermu भी इस्तेमाल किया गया है) शामिल है, जिसका अर्थ है सबसे हालिया कमांड का अंतिम शब्द। (यह अधिकांश गोले में उपलब्ध है: निश्चित रूप से bash, cshऔर tcsh।) :hएक अनुगामी फ़ाइल नाम घटक को हटाने के लिए संशोधक को लागू करें , केवल h ead को छोड़कर , और आपकी आज्ञा है cd !$:h

निम्नलिखित उदाहरणों में, बोल्ड टेक्स्ट वह है जो आप टाइप करते हैं:

~ $ vim /usr/share/drupal7/sites/all/modules/legacy/legacy.module 
                (फ़ाइल संपादित करें) 
~ $ cd! $: h
सीडी / यूएसआर / शेयर / ड्रुपल 7 / साइट / सभी / मॉड्यूल / विरासत
/ usr / शेयर / drupal7 / साइटों / सभी / मॉड्यूल / विरासत $

यह एक बिंदु तक निर्देशिका नाम में रिक्त स्थान को संभाल सकता है:

~ $ vim / usr / share / drupal7 / साइट्स / सभी / मॉड्यूल / पुराने \ code / legacy.module 
                (फ़ाइल संपादित करें) 
~ $ cd! $: h
सीडी / यूएसआर / शेयर / ड्रुपल 7 / साइटें / सभी / मॉड्यूल / पुराने \ कोड
/ usr / शेयर / drupal7 / साइटों / सभी / मॉड्यूल / पुराने कोड $

या

~ $ vim / usr / share / drupal7 / साइट्स / सभी / मॉड्यूल / "पुराना कोड" /legacy.module 
                (फ़ाइल संपादित करें) 
~ $ cd! $: h
सीडी / यूएसआर / शेयर / ड्रुपल 7 / साइटें / सभी / मॉड्यूल / "पुराना कोड"
/ usr / शेयर / drupal7 / साइटों / सभी / मॉड्यूल / पुराने कोड $

लेकिन, मुझे लगता है कि एक अच्छा सामान्य कथन यह है कि यह विफल रहता है यदि /फ़ाइल नाम में अंतिम उद्धृत किया गया है:

~ $ vim "/ usr / share / drupal7 / साइट्स / सभी / मॉड्यूल / पुराने कोड / विरासत .odule" 
                (फ़ाइल को संपादित करें) 
~ $ cd! $: h
सीडी "/ usr / शेयर / drupal7 / साइटों / सभी / मॉड्यूल / पुराने कोड
> Ctrl+ C        (शेल निरंतरता पाठ के लिए पूछता है
                    क्योंकि यह एक बेजोड़ उद्धरण चरित्र देखता है।)

यदि फ़ाइल वर्तमान निर्देशिका में है तो यह भी विफल हो जाती है:

~ $ vim legacy.module 
        (फ़ाइल संपादित करें) 
~ $ cd! $: h
सीडी विरासत
-बाश: सीडी: विरासत। सूत्र: ऐसी कोई फ़ाइल या निर्देशिका नहीं
~ $                  ( : h  का कोई प्रभाव नहीं है क्योंकि  ! $  में a  / ) नहीं है

लेकिन यह तुच्छ है। यदि फ़ाइल वर्तमान निर्देशिका में है, तो आप बिलकुल नहीं करेंगे cd। यदि आप फ़ाइल नाम को एक चर में रखते हैं तो एक और समस्या होगी:

~ $ fn = / usr / share / drupal7 / साइट्स / सभी / मॉड्यूल / विरासत / विरासत .odule 
~ $ vim "$ fn" 
        (फ़ाइल संपादित करें) 
~ $ cd! $: h
सीडी "$ fn"
-बैश: सीडी: /usr/share/drupal7/sites/all/modules/legacy/legacy.module: निर्देशिका नहीं
~ $                  ( : h  का कोई प्रभाव नहीं है क्योंकि  ! $  (जो  "$ fn" है ) में a  / शामिल नहीं है )

आप इसे इस प्रकार संभाल सकते हैं:

~ $ fn = / usr / share / drupal7 / साइट्स / सभी / मॉड्यूल / विरासत / विरासत .odule 
~ $ vim 
        (फ़ाइल संपादित करें) 
~ $ cd "$ {fn% / *}" 
/ usr / शेयर / drupal7 / साइट / सभी / मॉड्यूल / विरासत $

के रूप में अन्य उत्तर का सुझाव दिया, का उपयोग .या "$PWD"के लिए git addआदेश।


1

दो चरण:

एक शेल स्क्रिप्ट "cdfile" युक्त बनाएं cd "$(dirname "$1")", इसे निष्पादन योग्य बनाएं और इसे कहीं रख दें, जहां यह पाया जाएगा।

अब उपयोग करें

vim /usr/share/drupal7/sites/all/modules/legacy/legacy.module
cdfile <alt>+<.> # for last command attribute
git add .

आप केवल इसी नाम से शेल फ़ंक्शन भी बना सकते हैं।
slhck

@ एसएलएचके हां, आप कर सकते थे - लेकिन यह उपयोगी शेल को कम कर देगा। एक अलग निष्पादन योग्य फ़ाइल का उपयोग करने से हर संदर्भ के लिए कार्यक्षमता उपलब्ध होती है
यूजेन रीक

मैं ऊपर सूचीबद्ध के रूप में "cdfile" प्राप्त कर चुका हूं, लेकिन ऐसा लगता है कि यह cwd को केवल उप-संस्करण में बदल देता है - क्या यह संभव है?
पीटिका

1
बिल्कुल: यह केवल संभव नहीं है, लेकिन अपरिहार्य और अनुमानित है कि एक cdशेल स्क्रिप्ट में केवल स्क्रिप्ट के बाकी हिस्सों को प्रभावित करेगा - और यदि स्क्रिप्ट केवल एक ही कमांड है, तो "बाकी स्क्रिप्ट" कुछ भी नहीं है। कोई स्क्रिप्ट स्क्रिप्ट को लागू करने वाले मूल शेल की कार्यशील निर्देशिका को प्रभावित नहीं कर सकती है।
स्कॉट

इस बात पर निर्भर करता है कि आप स्क्रिप्ट को कैसे कॉल करते हैं - यदि आपके पास शुरू में कोई हैशबैंग नहीं है तो आप एक सबशेल नहीं बनाते हैं। यह निश्चित रूप से CentOS 6.4 मानक स्थापना पर यहां काम करता है।
यूजेन रीक

0

फ़ाइल नाम से निर्देशिका नाम निकालने का एक तरीका है, इसे dirname कहा जाता है

cd `dirname /your/file/path`

यह टूट जाएगा यदि निर्देशिका नाम में इसके पथ में एक स्थान है।
slhck

सच है, यह एक उदाहरण की तरह अधिक था, एक शुरुआती बिंदु
दान

0

उपयोग करना dirnameऔर !$:

vim /usr/share/drupal7/sites/all/modules/legacy/legacy.module
cd "$(dirname !$)" 
git add "$PWD"

यह टूट जाएगा यदि निर्देशिका या फ़ाइल नाम में उनके पथ में एक स्थान होता है। आपको प्रतिस्थापन को ठीक से उद्धृत करने की आवश्यकता है।
slhck

फ़ाइल नाम या निर्देशिका के नाम पर जगह के लिए सही
jcbermu

0

यहाँ एक त्वरित और गंदा तरीका cdहै एक द्विआधारी निर्देशिका ...

> cd "$(dirname "`which bash`")"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.