将文件族放入文件夹中

将文件族放入文件夹中

大量字体文件(2728 个文件)被平放在一个文件夹中。

我想将属于同一字体系列的所有文件移动到一个文件夹中,其中文件夹名称是字体系列的完整名称。

例如在以下文件列表中:

Axle.otf
AxleBold.otf
AxleBoldItalic.otf
AxleCondBold.otf
AxleCondensed.otf
AxleCondItalic.otf
AxleExpanded.otf
AxleExpBold.otf
AxleExpItalic.otf
AxleItalic.otf
AxleNarBold.otf
AxleNarItalic.otf
AxleNarrow.otf
AxleWide.otf
AxleWideBold.otf
AxleWideItalic.otf

Distract.otf
DistractBold.otf
DistractBoldItalic.otf
DistractCondBold.otf
DistractCondensed.otf
DistractCondItalic.otf
DistractExpanded.otf
DistractExpBold.otf
DistractExpItalic.otf
DistractItalic.otf
DistractNarBold.otf
DistractNarItalic.otf
DistractNarrow.otf
DistractWide.otf
DistractWideBold.otf
DistractWideItalic.otf

Voltagio.otf
VoltagioBold.otf
VoltagioBoldItalic.otf
VoltagioCondBold.otf
VoltagioCondensed.otf
VoltagioCondItalic.otf
VoltagioExpanded.otf
VoltagioExpBold.otf
VoltagioExpItalic.otf
VoltagioItalic.otf
VoltagioNarBold.otf
VoltagioNarItalic.otf
VoltagioNarrow.otf
VoltagioOutline.otf
VoltagioWide.otf
VoltagioWideBold.otf
VoltagioWideItalic.otf

我希望所有以“Axle”开头的文件都位于一个名为 Axle 的文件夹中;以“Distract”开头的文件位于名为 Distract 的文件夹中;用于移动 Voltagio 文件夹的所有“Voltagio”文件等。

基本上,字体文件的最短名称是该字体系列的基本名称,应用于将系列收集到具有该基本名称的文件夹中。基本名称的长度从大约 4 到 12 个字符不等。

另一个问题是,某些“系列”仅包含一个文件,因此我不希望它们进入单独的文件夹,而是保留在目标文件夹的根级别。

任何帮助,将不胜感激。

答案1

在您的示例中,我看到您的所有文件名为<font-family>[<style-surfix>].otf

  • <font-family>出现在所有文件名中,也都是字体系列目录你想要创建的
  • <style-surfix>可能, 或者组合7 元素集:Bold, Italic, Cond, Exp, Nar, Wide, Out

为了更容易地表达我的答案,我致电:

  • <font-family>.otf: 裸字体
  • <font-family><style-surfix>.otf:衍生字体

该脚本正确完成您的任务:

# move all `derived fonts` to `.temp/` directory:
mkdir -p .temp/
mv "*{Bold,Italic,Cond,Exp,Nar,Wide,Out}*.otf" .temp/ 2> /dev/null

for file in ./*.otf; do
    # get `family name` based on `bare font`'s name
    name=${file%.*}

    # create `family directory`
    mkdir -p "${file%.*}"

    # move `bare font` to correct directory
    mv "$file" "$name/"

    # move `derived font` to corresponding `family directory`
    mv .temp/"$name"*.otf "$name/"
done;

# remove temporary directory
rmdir .temp/ 2> /dev/null

相关内容