इस बहुत ही दिलचस्प सवाल के जवाब को पढ़ने के बाद और एंड्रॉइड (एक्सफ़ैट) और एक कार मनोरंजन प्रणाली (vfat) के लिए एसडी कार्ड के साथ कुछ प्रयोग करने के बाद, मैं इस छोटी सी बैश स्क्रिप्ट पर आया।
#! /bin/bash
DST=$1
# copy music to FAT media
find music/ Music/ -type f | while read f ; do
d=$DST/$( echo $f | sed 's/[^-A-Za-z0-9/._ ()]/_/g' )
echo :$d:
mkdir -p "$(dirname "$d")"
cp -n "$f" "$d"
done
यह गंतव्य (माउंट बिंदु) को तर्क के रूप में लेता है और find
मेरे संगीत भंडार में सभी फ़ाइलों का पता लगाने के लिए उपयोग करता है।
प्रत्येक फ़ाइल पथ के लिए, यह गंतव्य पथ और फ़ाइल नाम को गंतव्य से बाहर निकालकर और किसी भी आक्रामक चरित्र को किसी अंडरस्कोर के साथ प्रतिस्थापित करता है _
। (अक्षर, अंक, मैं पात्रों में से एक सफेद सूची का उपयोग -
, /
, .
,
। (
, )
और _
) किसी भी अवांछित विराम चिह्न निकालें।
लोकेल के आधार पर, यह पथ और फ़ाइल नाम में उच्चारण अक्षरों को छोड़ देगा, जो आधुनिक एफएटी फ़ाइल सिस्टम के लिए ठीक है, जैसा कि ऐसा लगता है।
प्रत्येक गंतव्य फ़ाइल पथ और नाम के लिए, निर्देशिकाओं का उपयोग आवश्यकतानुसार किया जाता है mkdir -p
, फिर फ़ाइल की प्रतिलिपि बनाई जाती है, जब तक कि यह पहले से मौजूद न हो।
"
विभिन्न स्थानों पर उद्धरण चिह्नों पर ध्यान दें , उन्हें अलग-अलग तोड़ने से उनमें पथ और नामों को रखने की आवश्यकता होती है।