2012-08-01 19 views
6

से पहले:awk, sed: किसी दिए गए फ़ोल्डर में _all_ फ़ाइल नामों से रिक्त स्थान हटाने के लिए एक लाइनर कमांड?

eng-vshakya:scripts vshakya$ ls 
American Samoa.png     Faroe Islands.png     Saint Barthelemy.png 

के बाद:

eng-vshakya:scripts vshakya$ ls 
AmericanSamoa.png     FaroeIslands.png     SaintBarthelemy.png 

प्रोटोटाइप नीचे कोशिश की, लेकिन यह काम नहीं करता :(क्षमा करें, बहुत अच्छा नहीं है जब यह आता है करने के लिए awk/SED :(

ls *.png | sed 's/\ /\\\ /g' | awk '{print("mv "$1" "$1)}' 

[ऊपर प्रोटोटाइप है, वास्तविक आदेश, मुझे लगता है:

ls *.png | sed 's/\ /\\\ /g' | awk '{print("mv "$1" "$1)}' | sed 's/\ //g' 

]

+3

यह [पार्सिंग एलएस समस्या] (http://mywiki.wooledge.org/ParsingLs) से ग्रस्त है। यदि आपका खोल इसका समर्थन करता है, तो इसके बजाय ghoti के समाधान का उपयोग करें। – Graham

+0

@ ग्राहम: मुझे पार्सिंग एलएस समस्या से अवगत नहीं था। लिंक बहुत उपयोगी था। उत्तर के लिए धन्यवाद – Viren

उत्तर

7

ghoti का समाधान करना सही बात है। जब से तुम कैसे एसईडी में यह करने के लिए पूछते हैं, यहां एक ही रास्ता है:

for file in *; do newfile=$(echo "$file" | tr -d \\n | sed 's/ //g'); 
    test "$file" != "$newfile" && mv "$file" "$newfile"; done 

tr है फ़ाइल नाम में नई-पंक्तियों को हटाने के लिए, और कहा कि sed एक पंक्ति में पूरे फ़ाइल नाम देखता है सुनिश्चित करने के लिए आवश्यक है।

15

जब आप इसे शुद्ध बैश में कर सकते हैं तो अजीब या sed का उपयोग करने की आवश्यकता नहीं है।

[[email protected] ~/tmp1]$ ls -l 
total 2 
-rw-r--r-- 1 ghoti wheel 0 Aug 1 01:19 American Samoa.png 
-rw-r--r-- 1 ghoti wheel 0 Aug 1 01:19 Faroe Islands.png 
-rw-r--r-- 1 ghoti wheel 0 Aug 1 01:19 Saint Barthelemy.png 
[[email protected] ~/tmp1]$ for name in *\ *; do mv -v "$name" "${name// /}"; done 
American Samoa.png -> AmericanSamoa.png 
Faroe Islands.png -> FaroeIslands.png 
Saint Barthelemy.png -> SaintBarthelemy.png 
[[email protected] ~/tmp1]$ 

ध्यान दें कि ${foo/ /} अंकन बैश है, और क्लासिक बॉर्न शैल में काम नहीं करता।

+0

धन्यवाद। और हालांकि मैं समझता हूं कि यह करने का सही तरीका है, लेकिन इस सवाल से पूछने का इरादा मेरी निजी शिक्षा के लिए और किसी भी उत्पादन प्रणाली का हिस्सा नहीं था। इसलिए मैं श्री पर्सेल के जवाब को स्वीकार कर रहा हूं। – Viren