हेयर यू गो:
for file in /home/user/temps/*/thumb.png; do new_file=${file/temps/new_folder}; cp "$file" "${new_file/\/thumb/}"; done;
संपादित करें:
वैसे, विहित ज्ञान, यह है कि इसके लिए उपयोग find
करना एक बुरा विचार है - बस शेल विस्तार का उपयोग करना अधिक विश्वसनीय है। इसके अलावा, यह मानता है bash
, लेकिन मुझे लगता है कि एक सुरक्षित धारणा है :)
2 संपादित करें:
स्पष्टता के लिए, मैं इसे तोड़ दूंगा:
# shell-expansion to loop specified files
for file in /home/user/temps/*/thumb.png; do
# replace 'temps' with 'new_folder' in the path
# '/home/temps/abc/thumb.png' becomes '/home/new_folder/abc/thumb.png'
new_file=${file/temps/new_folder};
# drop '/thumb' from the path
# '/home/new_folder/abc/thumb.png' becomes '/home/new_folder/abc.png'
cp "$file" "${new_file/\/thumb/}";
done;
${var/Pattern/Replacement}
निर्माण पर विवरण यहाँ पाया जा सकता है ।
cp
फ़ाइलनाम में रिक्त स्थान और newlines आदि को संभालने के लिए पंक्ति में उद्धरण महत्वपूर्ण हैं।