标签: msgfmt

使用 find -exec 递归地将 msgfmt 命令应用于目录中的所有 .po 文件

我有以下目录结构:

webiste/
    locale/
        en/
             LC_MESSAGES/
                     translation.po
        de/
            LC_MESSAGES/
                     translation.po
        fr/
            LC_MESSAGES/
                     translation.po
Run Code Online (Sandbox Code Playgroud)

我正在使用该find命令获取所有.po文件并将该msgfmt命令应用于它们。

所以当我运行这个命令时:

find . -name \*.po
Run Code Online (Sandbox Code Playgroud)

输出是

./locale/fr/LC_MESSAGES/translation.po
./locale/de/LC_MESSAGES/translation.po
./locale/en/LC_MESSAGES/translation.po
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,但现在我添加以下内容时:

find . -name \*.po -exec msgfmt "{}" \;
Run Code Online (Sandbox Code Playgroud)

它不输出任何内容,也不会创建它应该创建的 .mo 文件(如果我单独对每个文件执行此操作,则msgfmt命令按预期工作)。

这很奇怪,因为如果我将命令更改为:

找 。-name *.po -exec echo "{}" \;

它正确输出文件的名称。

我已经解决了这个问题:

find . -name \*.po -exec msgfmt "{}" -o {}.mo \;
Run Code Online (Sandbox Code Playgroud)

但它输出一个 translation.po.mo

如何才能做到这一点?

bash scripts find msgfmt

8
推荐指数
2
解决办法
2439
查看次数

标签 统计

bash ×1

find ×1

msgfmt ×1

scripts ×1