2010-11-11 21 views
13

मैं वर्तमान निर्देशिका में सभी फ़ाइलों का नाम बदलने की कोशिश कर रहा हूं जैसे कि ऊपरी केस नाम को कम में परिवर्तित किया गया है। मैं इस तरह यह करने के लिए कोशिश कर रहा हूँ:xargs - मैं गलत क्या कर रहा हूं?

ls -1|gawk '{print "`mv "$0" "tolower($0)"`"}'|xargs -i -t eval {} 

मैं निर्देशिका में दो फ़ाइलें, वाई और YY आयकर डिबगिंग के लिए जोड़ा, और उत्पादन है:

eval `mv Y y` 
xargs: eval: No such file or directory 

अगर मैं निष्पादित अपने आप को eval, यह काम करता है और वाई करने के लिए वाई।

मुझे पता है कि इसे प्राप्त करने के अन्य तरीके हैं, लेकिन अगर मैं कर सकता हूं तो मैं यह काम करना चाहता हूं! चीयर्स

उत्तर

19

eval एक खोल builtin command है, जो स्टैंडअलोन निष्पादन योग्य नहीं है। इस प्रकार, xargs इसे सीधे नहीं चला सकता है। आप शायद चाहते हैं:

for i in *; do mv $i `echo $i | tr '[A-Z]' '[a-z]'`; done 
+0

ठीक है, धन्यवाद आप जीएनयू समानांतर स्थापित इस काम करेंगे (यहां तक ​​कि रचनात्मक नाम के साथ फ़ाइलों पर) है। मुझे एहसास से थोड़ा और अधिक। –

+5

अनुमान लगाया गया है कि आपको इस विधि के साथ eval (या ') की आवश्यकता नहीं है। तो एलएस -1 | गॉक '{प्रिंट "एमवी" $ 0 "" tolower ($ 0)}' | xargs -i -t sh -c "{}" काम करता है साथ ही –

2

यद्यपि आप एक xargs समाधान पर देख रहे हैं, एक ही बात को करने के लिए एक और तरीका tr (यह मानते हुए श/bash/ksh वाक्य रचना) के साथ किया जा सकता है यदि आपकी फ़ाइलें रचनात्मक उपयोगकर्ताओं द्वारा बनाई गई हैं, तो आपको

My brother's 12" records 

समाधान अब तक ऐसी फाइलों पर काम नहीं करते हैं।

ls | parallel 'mv {} "$(echo {} | tr "[:upper:]" "[:lower:]")"' 

घड़ी परिचय वीडियो अधिक जानने के लिए:: - कि काम करता है http://www.youtube.com/watch?v=OpaiGYxkSuQ

+0

हां, यह शायद सबसे अच्छा है - यह एक सहयोगी का समान कोड है, लेकिन कई लाइनों पर विभाजित है, और एक चर का उपयोग कर - जिसने सवाल पूछा - क्या आप इसे कर सकते हैं 1 लाइन में? मैं xargs को काम करने के लिए x12s प्राप्त करने की कोशिश करके विचलित हो गया –

+0

हाँ - जो मैंने ऊपर छोड़ा है वह संशोधन के बिना काम करेगा। कोई फर्क नहीं पड़ता कि आप किसके साथ काम कर रहे हैं, यदि आप एक पंक्ति पर एकाधिक कथन जोड़ना चाहते हैं तो सेमी-कॉलन कथन विभाजक हैं। –

1

:

ls -1 | gawk '{print "`mv "$0" "tolower($0)"`"}' | xargs -i -t sh -c "{}" 
संबंधित मुद्दे