【问题标题】:Moving ttf file causes extra extension移动 ttf 文件会导致额外的扩展名
【发布时间】:2019-11-12 23:20:05
【问题描述】:

我在压缩后重命名我的文件以便协商正确进行。使用的命令之一是

find dist -name "*.ttf" -type f -print -exec sh -c 'f="{}"; mv -- "$f" "${f%.ttf}.ttf.ttf"' \;

相同的命令对 html、css、svg 等扩展名非常有效,并导致文件具有预期的双扩展名。例如 - .html.html

但是,上述命令的结果是 .ttf.ttf.ttf

我将它作为 gitlab CI 的一部分运行,它会生成一个新的构建。因此,没有冲突的可能性,因为它完全从一个空文件夹开始。 这样做是为了为静态站点提供压缩文件。服务器是 Apache,我在 httpd.conf 或 .htaccess 中找不到任何可能额外重命名文件的内容。

预期输出 - *.ttf 文件应重命名为 *.ttf.ttf

【问题讨论】:

  • find 不保证首先识别所有ttf 文件,然后重命名它们;它正在找到一个,重命名它,然后移动到下一个。结果,在原始文件已经重命名后,它会找到要重命名的“其他”ttf 文件。

标签: sh mv


【解决方案1】:

为避免竞争条件和其他特定于实现的障碍,请分两步执行此操作。首先,用“标记”重命名每个文件:

find dist -name "*.ttf" -type f -print -exec sh -c 'mv -- "$1" "${1%.ttf}.ttf.foo"' _ {} \;

然后用适当的扩展名替换“标记”:

find dist -name "*.foo" -type f -print -exec sh -c 'mv -- "$1" "${1%.foo}.ttf"' _ {} \;

这保证find 无法创建与它正在处理的扩展名相同的文件。

【讨论】:

  • 这对我有用。但我只是好奇这个问题只出现在 ttf 文件中。为什么我正在运行相同命令的 js/html/php 文件出现相同的问题。
猜你喜欢
  • 2014-04-20
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多