【问题标题】:Bash to refer to txt list to find data in directory and copy itemsBash 引用 txt 列表在目录中查找数据并复制项目
【发布时间】:2013-05-02 16:22:49
【问题描述】:

我有一个包含超过 7000 行字体名称的文本文件,这是我们设计部门需要的。该列表是由去除了任何文件扩展名的软件生成的。有些文件确实没有扩展名。

此“fontList.txt”需要通过脚本读取并引用一个文件夹,该文件夹将包含许多子目录,其中包含数以万计的字体文件。原始文件将在适当的情况下具有其文件扩展名。

挑战在于源列表中没有文件扩展名,但字体存在版本差异,因此旧的 Type 1 变体可能是“Banana”,而新的 Open Type 可能是“Banana.otf”。可能需要这两个版本,但源列表只会引用“Banana”,因此脚本需要找到这两个版本。

在 Mac OS 10.8 的命令行上以交互方式运行,我需要修改以下内容才能工作:

sourceList="/Users/"$useris"/Desktop/fontList.txt"
sourceDir="/Users/Shared/DesignFonts"

cat "$sourceList" |
while read FONTPATH
do
    echo font from source list to find and copy is "${FONTPATH}" | tee -a "$logPath"
    find "$sourceDir" -type f -name "${FONTPATH}" -exec cp -vf {} /Users/"$useris"/Desktop/fontPot/ \;
done

echo 语句纯粹用于检查目的。

目前,该脚本有效,但不会引用 sourceDir 中具有文件扩展名的字体文件,例如 .otf .ttf

澄清一下,sourceList 看起来像:

马里昂
MetaNorCap
MetaNorCapExp
MinionPro-Bold

sourceDir 的内容看起来像:

马里昂.ttc
MesquiteStd.otf
MetaNorCap
MetaNorCapExp
微软
微软无衬线字体.ttf
MinionPro-Bold.otf

注意:
上面的“Microsoft”是一个目录。
这些是更大的 A-Z 列表中的示例列表。

【问题讨论】:

    标签: macos bash while-loop find


    【解决方案1】:

    您可以指定所有扩展名:

    ... -exec cp -vf {} {}.otf {}.ttf /Users/"$useris"/Desktop/fontPot/ \;
    

    【讨论】:

    • 如果HelveticaHelvetica.otf 位于不同的目录怎么办?
    【解决方案2】:

    这也将匹配例如 Helvetica.Neue.ttf,即使列表仅包含 Helvetica。如果 fontList.txt 不包含通配符 ([]*?\),则不需要 f2

    cat ~/Desktop/fontList.txt | while IFS= read -r f; do f2=$(sed 's/[][*?\]/\\&/g' <<< "$f"); find /Users/Shared/DesignFonts -type f \( -name "$f2" -o -name "$f2.*" \) -exec cp {} ~/Desktop/fontPot \;; done

    或者如果你install bash 4,你可以使用globstar:

    shopt -s globstar extglob; cat ~/Desktop/fontList.txt | while IFS= read -r f; do cp /Users/Shared/DesignFonts/**/"$f"?(.*) ~/Desktop/fontPot; done

    glob 表达式也匹配目录,但 cp 应该拒绝复制它们。 ?(.?|.??|.???|.????) 只会匹配 4 个字符或更短的扩展名。

    【讨论】:

      猜你喜欢
      • 2023-02-11
      • 2011-12-29
      • 2016-01-25
      • 2020-08-31
      • 2014-10-13
      • 2018-05-14
      • 2011-10-10
      • 2010-09-15
      • 2013-01-07
      相关资源
      最近更新 更多