फोंट युक्त निर्देशिका के भीतर निम्नलिखित कमांड को काम करना चाहिए, यदि आप फ़ॉन्ट संग्रहण निर्देशिका के बाहर से उपयोग करना चाहते हैं, तो बदल for f in ./*
दें for f in /directory/containing/fonts/*
। यह एक बहुत ही शेल आधारित पद्धति है, इसलिए काफी धीमी है, और गैर-पुनरावर्ती भी है। यह केवल निर्देशिका बनाएगा, अगर ऐसी फाइलें हैं जो मिलान चरित्र से शुरू होती हैं।
target=/directory/to/store/alphabet/dirs
mkdir "$target"
for f in ./* ; do
if [[ -f "$f" ]]; then
i=${f##*/}
i=${i:0:1}
dir=${i^}
if [[ $dir != [A-Z] ]]; then
mkdir -p "${target}/#" && mv "$f" "${target}/#"
else
mkdir -p "${target}/$dir" && mv "$f" "${target}/$dir"
fi
fi
done
एक लाइनर के रूप में, फिर से फ़ॉन्ट भंडारण निर्देशिका के भीतर से:
target=/directory/to/store/alphabet/dirs; mkdir "$target" && for f in ./* ; do if [[ -f "$f" ]]; then i=${f##*/}; i=${i:0:1} ; dir=${i^} ; if [[ $dir != [A-Z] ]]; then mkdir -p "${target}/#" && mv "$f" "${target}/#"; else mkdir -p "${target}/$dir" && mv "$f" "${target}/$dir" ; fi ; fi ; done
बैश पैरामीटर विस्तार का उपयोग करते हुए, समान स्ट्रिंग हेरफेर के साथ, खोजने का एक तरीका, जो पुनरावर्ती होगा, और शुद्ध शेल संस्करण की तुलना में कुछ तेज होना चाहिए:
find . -type f -exec bash -c 'target=/directory/to/store/alphabet/dirs ; mkdir -p "$target"; f="{}" ; i="${f##*/}"; i="${i:0:1}"; i=${i^}; if [[ $i = [[:alpha:]] ]]; then mkdir -p "${target}/$i" && mv "$f" "${target}/$i"; else mkdir -p "${target}/#" && mv "$f" "${target}/#"; fi' \;
या अधिक आसानी से:
find . -type f -exec bash -c 'target=/directory/to/store/alphabet/dirs
mkdir -p "$target"
f="{}"
i="${f##*/}"
i="${i:0:1}"
i=${i^}
if [[ $i = [[:alpha:]] ]]; then
mkdir -p "${target}/$i" && mv "$f" "${target}/$i"
else
mkdir -p "${target}/#" && mv "$f" "${target}/#"
fi' \;