कैसे तोड़फोड़ में @ अक्षर से बचने के लिए फ़ाइल नाम प्रबंधित?


191

कई तोड़फोड़ कार्यों के लिए, फ़ाइल या URL तर्क के अंत में '@' प्रतीक को जोड़ना आपको उस फ़ाइल के विशिष्ट संशोधन को लक्षित करने की अनुमति देता है। उदाहरण के लिए, "svn info test.txt@1234" test.txt के बारे में जानकारी देगा क्योंकि यह संशोधन 1234 में मौजूद था।

हालाँकि, जब फ़ाइल के नाम में एक @ होता है, तो इसे गलत तरीके से सबविर्सन द्वारा एक संशोधन विनिर्देशक के रूप में व्याख्या किया जाता है:

svn info 'test @ .txt' svn: सिंटैक्स त्रुटि पार्सिंग संशोधन '.txt'।

मैंने 'और', '\' और '@' के साथ भागने के साथ-साथ दोहरे और एकल उद्धरणों की कोशिश की है। मैं फ़ाइल नाम के भाग के रूप में @ प्रतीकों का इलाज करने के लिए तोड़फोड़ कैसे बता सकता हूं?


3
क्यों पृथ्वी पर आप उन में @ के साथ फ़ाइल नाम रखते हैं? परेशानी के लिए पूछ रहा है, अगर आप मुझसे पूछें ... :-)
जेस्पर

बहुत अच्छा सवाल! :) मैं एक परियोजना पर ले जा रहा हूँ जहाँ यह चरित्र फ़ाइल नामकरण सम्मेलनों का एक मूलभूत घटक है और दुर्भाग्य से निकट भविष्य में इसे बदला नहीं जा सकता है।
पश्चिमोत्तर

57
Apple ने इस कन्वेंशन को अपने सभी iOS डेवलपर्स के लिए iOS 4+ के रूप में बनाया। सभी संपत्तियों का नाम @ 2x है यदि वे उच्च रेस डिस्प्ले के लिए हैं ...
दिमित्रिस

2
यहूदी बस्ती की पुरानी शैली
मतलाब

इसके अलावा, अगर आप थंडरबर्ड के एनगमेल से अपनी निजी कुंजी या निरस्तीकरण कुंजी को बचाते हैं, तो यह एक फ़ाइल नाम बनाता है - अनुचित रूप से नहीं, आवेदन को देखते हुए - एक साइन इन करें
पीटर फ्लिन

जवाबों:


283

से SVN पुस्तक (जोर जोड़ा):

अवधारणात्मक पाठक शायद इस बिंदु पर सोच रहा है कि क्या खूंटी पुनरीक्षण वाक्यविन्यास काम करने वाले रास्तों या URL के लिए समस्या पैदा करता है जो वास्तव में उन पर संकेतों में हैं। आखिर, svn को कैसे पता चलता है कि क्या news@11मेरे पेड़ में एक निर्देशिका का नाम है या " समाचार के संशोधन 11" का सिंटैक्स ? शुक्र है, जबकि svn हमेशा बाद को ग्रहण करेगा, एक तुच्छ काम है। आप केवल पथ के अंत करने के लिए संकेत पर एक संलग्न की जरूरत है , जैसे news@11@svn तर्क में अंतिम संकेत पर केवल परवाह करता है, और हस्ताक्षर के बाद शाब्दिक खूंटी संशोधन निर्दिष्ट को छोड़ना अवैध नहीं माना जाता है। यह वर्कअराउंड उन रास्तों पर भी लागू होता है, जो एक साइन में समाप्त होते हैं - आप उपयोग करेंगेfilename@@फ़ाइल नाम @ के बारे में बात करने के लिए @


4
ध्यान दें कि "svn diff" का उपयोग करने के लिए आपको संशोधन पैरामीटर जोड़ने की आवश्यकता है। "svn up @ file @" काम करता है, लेकिन "svn diff @ file @" काम नहीं करता है। आपको "svn diff -r HEAD @ file @"
विश्लेषणात्मक

एसवीएन पुस्तक के लिए ध्यान दें: फाइलें बिना एक्सटेंशन के भी मौजूद हो सकती हैं, यहां तक ​​कि विंडोज पर भी, इसलिए news@11फाइल भी हो सकती है।
trysis

1
ध्यान दें कि कुछ आदेशों के लिए, नाम बदलने की तरह, एक तर्क या तो एक संस्करणित आइटम या स्थानीय फ़ाइल नाम हो सकता है। नाम बदलने के मामले में, लक्ष्य को पिन किए गए संशोधन के लिए भी स्कैन किया जाता है, लेकिन बाद में इसे सादे नाम के रूप में माना जा सकता है। उदाहरण के लिए, आप नाम बदलना चाहते हैं, तो @fooकरने के लिए @bar, svn rename @foo@ @barके बारे में शिकायत करेंगे @bar; लेकिन अगर आप इसे बनाते हैं svn rename @foo@ @bar@, तो नया नाम शाब्दिक होगा @bar@। इससे बचने के लिए, जोड़ें ./(या .\ खिड़कियों पर) यह स्पष्ट करने के लिए कि यह एक स्थानीय मार्ग है svn rename @foo@ ./@bar:।
Zastai

82

मूल उत्तर सही है, लेकिन शायद पर्याप्त रूप से स्पष्ट नहीं है। विशेष यूनिक्स कमांड लाइन विकल्प निम्नानुसार हैं:

svn info 'image@2x.png@'

या

svn info "image@2x.png@"

या

svn info image\@2x.png\@

मैंने सिर्फ तीनों का परीक्षण किया।


4
मैंने भी परीक्षण किया svn info icon@2x.png@और यह काम भी किया। हाँ, कोई उद्धरण या स्लैश नहीं!
नैट

उद्धृत करने की आवश्यकता आपके शेल पर निर्भर करती है - मैं केएसएच का उपयोग करता हूं और यह सुनिश्चित करने के लिए कि आपको उद्धरण चिह्नों की आवश्यकता है (जैसा कि '@' एक संकेत है जो आप पृष्ठभूमि में चलने वाली प्रक्रिया चाहते हैं)। शेल के आधार पर YMMV।
डेविड एच।

हां। मेरा माइलेज bashहाईवे पर था :)
नैट

1
@ अब मैं इसे विफल नहीं कर सकता - ksh में उद्धरण के बिना इसका काम ठीक है। मुझे नहीं पता कि मुझे लगा कि मुझे उनकी आवश्यकता क्यों है - शायद कुछ अन्य मुद्दे - यह 2 साल पहले मैंने इसे पोस्ट किया था ...
डेविड एच

14

विभिन्न उप-फ़ोल्डरों में कई फाइलें जोड़ने का समाधान:

for file in $(find ./ -type f -name "*@*.png"); do svn add $file@; done

"Png" को " @ .png " में बदलें जिस तरह की फाइलें आप जोड़ना चाहते हैं।


अपने फ़ाइल नामों को कोट करना या बचना सुनिश्चित करें (और केस-असंवेदनशील मिलान करें)। यह भी @एक विशेष मामले के रूप में उनके नाम के साथ फ़ाइलों का इलाज करने की कोई जरूरत नहीं है , आप सुरक्षित रूप @से सभी फ़ाइल नामों पर प्रतीक को जोड़ सकते हैं for file in $(find ./ -type f -iname "*.png"); do svn add "$file@"; done:। यह भी, क्या यह तरीका आपके svn रेपो को एक फ़ाइल / निर्देशिका संरचना के साथ काम कर रहे स्थानीय कॉपी के साथ असंगत नहीं छोड़ता है?
१d:०४

खोज का उपयोग कर execसकते हैं eaiser हो सकता है:find . -type f -name "*@*.png" -exec svn add {}@ \;
वाल्टी येंग



8

मेरे मामले में मुझे एक SVN रेपो से फाइलें निकालने की जरूरत थी जिसमें एक @ चिह्न शामिल था:

यह काम नहीं करेगा:

svn remove 'src/assets/images/hi_res/locales-usa@2x.png'

लेकिन यह किया:

svn remove 'src/assets/images/hi_res/locales-usa@2x.png@'

6

कई फ़ाइलों को जोड़ने के लिए, वैकल्पिक समाधान है:

svn status | grep \.png | awk '{print $2"@"}'| xargs svn add

कृपया अपना उत्तर बताएं।
हेमंग

3
आप grep के बजाय awk का उपयोग कर सकते हैं:svn status | awk '/\.png/ {print $2"@"}'| xargs svn add
h3dkandi

1

"चाल" जैसे 2 तर्कों के साथ svn कमांड के लिए, आपको "@" को केवल बाएं (पहले) पैरामीटर में जोड़ना होगा । उदाहरण के लिए:

$ svn add README@txt@
A         README@txt

$ svn move README@txt@ README2@txt
A         README2@txt
D         README@txt


$ svn status
A       README2@txt

$ svn commit -m "blah"
Adding         README2@txt
Transmitting file data .
Committed revision 168.

$ svn delete README2@txt@
D         README2@txt

$ svn commit -m "blahblah"
*Deleting       README2@txt

Committed revision 169.

यह पंक्ति महत्वपूर्ण है: $ svn चाल README @ txt @ README2 @ txt

जैसा कि आप देख सकते हैं, हमें "README2 @ txt" पर "@" संलग्न करने की आवश्यकता नहीं है


0

@ डेविड एच

मैंने सिर्फ @ प्रतीकों से बचने के बिना एक समान कमांड की कोशिश की और यह अभी भी ठीक काम करता है

svn ci splash.png splash@2x.png@

यह GNU बैश, संस्करण 3.2.48 (1) -release (x86_64-apple-darwin10.0) और svn 1.6.16 पर है


0

मेरे लिए काम करने वाला एकमात्र समाधान @NPike द्वारा सुझाया गया था

svn revert 'पथ / to / filename @ ext @'


क्या आप सुनिश्चित हैं कि यह मूल प्रश्न की एक नई प्रतिक्रिया होनी चाहिए ? इसके बजाय अपवोट या टिप्पणी होनी चाहिए
निको हसे

क्षमा करें, मेरा बुरा, मैं अभी तक टिप्पणी नहीं जोड़ सकता
Jonyx4

0

मुझे ईमेल पते से उत्पन्न फ़ाइलनाम के साथ आज समस्या थी (बहुत अच्छा विचार नहीं!)।

समाधान, और शेल विस्तार के printfविकल्पों का उपयोग करना find

 svn add  $(find . -name "*@*.png" -printf "%p@ ")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.