मैं एक फ़ाइल के नाम का उपयोग कर/tmp/में एक नया फ़ोल्डर बनाने के लिए एक बैश स्क्रिप्ट पर काम कर रहा हूं, और तब फ़ाइल को उस फ़ोल्डर के अंदर कॉपी करें।बेसनाम एक बैश स्क्रिप्ट में रिक्त स्थान के साथ?
#!/bin/bash
MYBASENAME="`basename $1`"
mkdir "/tmp/$MYBASENAME"
for ARG in "[email protected]"
do
mv "$ARG" "/tmp/$MYBASENAME"
done
व्यवहार:
जब मैं mymove "/home/me/downloads/my new file.zip"
में टाइप यह इस से पता चलता:
mkdir /tmp/my
new
file.zip
mv: rename /home/me/downloads/my new file.zip to /tmp/my\nnew\nfile.zip:
मैं सब कुछ के आसपास उद्धरण के बहुत सारे है, तो मुझे समझ नहीं आता क्यों इस अपेक्षा के अनुरूप काम नहीं कर रहा ।
इसके अलावा, मेरे पास कई फाइलें होने पर फॉर्म लूप है। मैं चाहता हूं कि उन सभी को पहले तर्क के बेसनाम पर आधारित एक ही फ़ोल्डर में कॉपी किया जाए।
मैंने देखा कि बहुत सारी डिफ़ॉल्ट शैल स्क्रिप्ट्स बैश के बजाय sh का उपयोग करती हैं।मैं अभी भी एक नई रेखा को दिखने से रोकने के लिए 'echo \ c' जैसी चीज़ों को छोड़कर, एक बहुत अंतर नहीं बता सकता। सुझावों और सहायक उत्तर के लिए धन्यवाद। – cwd
echo \ c के साथ पोर्टेबल तरीका 'printf' का उपयोग करना है जहां आप प्रारूप स्ट्रिंग में' \ n' को छोड़ दें। सबसे अधिक उपयोग किए जाने वाले bashisms तर्कसंगत रूप से सरणी चर के उपयोग, गैर-पॉज़िक्स वाक्यविन्यास जैसे '[[...]] 'परीक्षण के लिए,' ((...)) 'के साथ लूप के लिए, और' चयन 'निर्माण । – Jens
यह मेरे मैकॉक्स शेर (जीएनयू बैश, संस्करण 3.2.48 (1) -release (x86_64-apple-darwin11) – rjha94