निम्नलिखित आपके दृष्टिकोण का प्रत्यक्ष निर्धारण है:
find . -type f -name 'file*' -exec sh -c 'x="{}"; mv "$x" "${x}_renamed"' \;
हालाँकि, यह बहुत महंगा है यदि आपके पास बहुत सारी मेलिंग फाइलें हैं, क्योंकि आप mv
प्रत्येक मैच के लिए एक ताजा शेल (जो निष्पादित करते हैं ) शुरू करते हैं। और अगर आपके पास किसी भी फ़ाइल नाम में अजीब अक्षर हैं, तो यह फट जाएगा। एक अधिक कुशल और सुरक्षित तरीका यह है:
find . -type f -name 'file*' -print0 | xargs --null -I{} mv {} {}_renamed
इसमें अजीब नाम वाली फाइलों के साथ काम करने का भी फायदा है। यदि find
यह समर्थन करता है, तो इसे कम किया जा सकता है
find . -type f -name 'file*' -exec mv {} {}_renamed \;
xargs
जब का उपयोग नहीं कर संस्करण उपयोगी है {}
के रूप में,
find .... -print0 | xargs --null rm
यहां rm
एक बार (या कई बार बहुत सारी फाइलों के साथ) कॉल किया जाता है, लेकिन हर फाइल के लिए नहीं।
मैं हटा दिया basename
आप में सवाल है, क्योंकि यह शायद गलत है: आप कदम होगा foo/bar/file8
करने के लिए file8_renamed
, नहीं foo/bar/file8_renamed
।
संपादन (जैसा कि टिप्पणियों में सुझाया गया है):
find
बिना जोड़ा छोटाxargs
- जोड़ा गया सुरक्षा स्टिकर
x
बेकार है:find . -type f -name 'file*' -exec mv {} "{}_renamed" \;
xargs
संस्करण में पहले उदाहरण की तरह ही दक्षता है /